川久保玲官网价格:请帮我看一下这段汇编代码??小弟初学~~~~~

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 04:24:01
DSEG SEGMENT 'DATA'

; TODO: add your data here!!!!
COUNT DB ?,?,?

DSEG ENDS

SSEG SEGMENT STACK 'STACK'
DW 100h DUP(?)
SSEG ENDS

CSEG SEGMENT 'CODE'

;*******************************************

START PROC FAR

; Store return address to OS:
PUSH DS
MOV AX, 0
PUSH AX

; set segment registers:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX

; TODO: add your code here!!!!
MOV CX,3
MOV DI,0
COMPARE:
MOV AH,1
INT 21H
CMP AL,0DH
JZ EXIT
CMP AL,30H
JA NUM
INC COUNT[DI+4]
JMP COMPARE
NUM:
CMP AL,39H
JA LETTER1
INC COUNT
JMP COMPARE
LETTER1:
CMP AL,41H
JL COMPARE
CMP AL,5AH
JA LETTER2
INC COUNT
JMP COMPARE
LETTER2:
CMP AL,61H
JL COMPARE
CMP AL,7AH
JA COMPARE
INC COUNT[DI+2]
JMP COMPARE
EXIT:
MOV DL,COUNT[DI]
ADD DI,2
ADD DL,30H
MOV AH,2
INT 21H
LOOP EXIT

; return to operating system:
RET
START ENDP

;*******************************************

CSEG ENDS

END START ; set entry point.

这个就是要实现一个计数的功能,分别计出字母,数字,和其他字符的个数
并且依次显示出来

但是我不明白,为什么最后输出的时候,没有继续显示,而是又从开头显示了

我该怎么改一下????????
谢谢

先指出你程序中的错误
1 最后的数据显示 你考虑到了如果统计值大于9以后显示的情况吗?
2 你COUNT 定义为字节 而不是字,所以 INC COUNT[DI+4]该改为INC COUNT[DI+2];其他对应的地方同样要改
3 上面都是小错误 显然 你给的源程序是不能通过运行的 因为你缺少段定义后的段制定 应该在 CSEG SEGMENT 'CODE' 后加一行 assume cs:CSEG,ds:DSEG,ss:SSEG
4 堆栈段定义分配的地址空间不要那么大 大概100字节足够;你100h字;你要知道DOS的内存就只有64k字节
5 你的程序结尾部分 又有程序结尾,又有子程序结尾,显得太乱

呵呵 这些都只是没有太多经验才会有的错误 建议你多看看一些完整的程序,并上机运行一下 收获会不小

现在来解决你的问题
在你显示数字前面插入一行换行的代码就好了 代码是:
mov dl,0Ah
MOV AH,2
INT 21H

下面是我改了的程序 你可以借鉴一下
DSEG SEGMENT 'DATA'
COUNT DB 3 DUP(?) ; TODO: add your data here!!!!
DSEG ENDS

SSEG SEGMENT STACK 'STACK'
DB 100 DUP(?)
SSEG ENDS

CSEG SEGMENT 'CODE'
assume cs:CSEG,ds:DSEG,ss:SSEG

;*******************************************

START:
MOV AX, DSEG ; set segment registers:
MOV DS, AX
MOV ES, AX

MOV CX,3 ; TODO: add your code here!!!!
MOV DI,0
COMPARE:
MOV AH,1
INT 21H
CMP AL,0DH
JZ EXIT
CMP AL,30H
JA NUM
INC COUNT[DI+2]
JMP COMPARE
NUM:
CMP AL,39H
JA LETTER1
INC COUNT
JMP COMPARE
LETTER1:
CMP AL,41H
JL COMPARE
CMP AL,5AH
JA LETTER2
INC COUNT
JMP COMPARE
LETTER2:
CMP AL,61H
JL COMPARE
CMP AL,7AH
JA COMPARE
INC COUNT[DI+1]
JMP COMPARE
EXIT:
mov dl,0Ah
MOV AH,2
INT 21H
EXIT1: MOV DL,COUNT[DI]
ADD DI,1
ADD DL,30H
MOV AH,2
INT 21H
LOOP EXIT1
mov ah,04ch
int 21h
CSEG ENDS
END START