汇编程序解释??按行解释 ,谢谢。

2024-12-29 14:27:51
推荐回答(1个)
回答1:

CODES SEGMENT ; 代码段说明
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS ; 这两行设置数据段寄存器DS指向DATAS
MOV DS,AX
LEA BX,BUFF ; BX = BUFF. BX置为BUFF首地址
MOV COUNT,30H ; COUNT='0',计数清为字符'0'(这也预示计数超过'9'就计不对了)
INPUT:MOV AH,01H ; 这两行要求键盘输入字符至AL
INT 21H ;
MOV [BX],AL ; 输入的字符保存到BX指向的BUFF[BX].
INC BX ; BX=BX+1, 移动指针BX指向BUFF下一个字节
CMP AL,'$' ; 输入的字符是'$'吗?
JNZ INPUT ; 如果不是,回去继续要求键盘输入字符至AL
LEA BX,BUFF ; 如果是'$', 输入结束。BX置为BUFF首地址
NEXT: MOV CL,[BX] ; CL = BUFF[BX] 取当前字符至CL
INC BX ; BX=BX+1, 移动指针BX指向BUFF下一个字节
CMP CL,'$' ; 当前字符为'$'吗?
JZ DISP ; 是'$', 表示BUFF所有字符已处理完毕,转DISP显示结果
CMP CL,30H ; 不是'$', 则将其与30H(字符0)比较
JB CONT ; 比'0'小,即非数字,则转CONT计数
CMP CL,39H ; 不比'0'小,则将其与39H(字符9)比较
JBE NEXT ; 不比'9'大,即数字字符,不计数而回去取BUFF的下一个字符
CONT:INC COUNT ; 计数加1
JMP NEXT ; 回去取BUFF的下一个字符
DISP:MOV DL,COUNT ; 这3行屏幕输出非数字字符的个数,即COUNT所表示的字符。
MOV AH,02H
INT 21H
MOV AH,4CH ; 这两行结束程序
INT 21H
CODES ENDS ; 代码段结束
END START ; 开始运行时从START标号作为入口