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

来源:百度知道 编辑:UC知道 时间:2024/06/06 23:31:48
这是一个统计输入字符串中非数字的个数,并输出。

DATAS SEGMENT
;此处输入数据段代码
BUFF DB 20 DUP(?)
COUNT DB 0
DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA BX,BUFF
MOV COUNT,30H
INPUT:MOV AH,01H
INT 21H
MOV [BX],AL
INC BX
CMP AL,'$'
JNZ INPUT
LEA BX,BUFF
NEXT: MOV CL,[BX]
INC BX
CMP CL,'$'
JZ DISP
CMP CL,30H
JB CONT
CMP CL,39H
JBE NEXT
CONT:INC COUNT
JMP NEXT
DISP:MOV DL,COUNT
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START

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 ; 不比