NPUT PROC NEAR NEXT: MOV AH,1 INT 21H CMP AL,0DH JZ R1 CMP AL,0AH JZ R1 CMP AL,'0' JB ERR CMP AL,'9' JA ERR SUB AL,'0' MOV DL,AL MOV AL,0AH MUL CL ADD AL,DL MOV CX,AX JMP NEXT ERR: MOV CX,-1 R1: RET INPUT ENDP
时间: 2023-11-13 14:05:07 浏览: 75
这是一个简单的汇编语言程序,可以实现从键盘输入一个数字(0-9之间的整数),并将其转换为十进制数。下面是具体的逐行注释:
```
NPUT PROC NEAR ; 定义一个名为 INPUT 的过程,其属性为 NEAR
NEXT: ; 标签,程序执行到此处时会跳转到 NEXT
MOV AH,1 ; 将 1 赋值给 AH 寄存器
INT 21H ; 调用 21H 中断,等待从键盘输入一个字符
CMP AL,0DH ; 比较 AL 寄存器中的值是否为回车符(ASCII码为13)
JZ R1 ; 如果是回车,跳转到标签 R1
CMP AL,0AH ; 比较 AL 寄存器中的值是否为换行符(ASCII码为10)
JZ R1 ; 如果是换行,跳转到标签 R1
CMP AL,'0' ; 比较 AL 寄存器中的值是否小于 '0' (即不是数字)
JB ERR ; 如果小于 '0',跳转到标签 ERR
CMP AL,'9' ; 比较 AL 寄存器中的值是否大于 '9' (即不是数字)
JA ERR ; 如果大于 '9',跳转到标签 ERR
SUB AL,'0' ; 将 AL 寄存器中的 ASCII 码转换为对应的数字(例如 '4' 的 ASCII 码为 52,'0' 的 ASCII 码为 48,52-48=4)
MOV DL,AL ; 将 AL 寄存器中的值存入 DL 寄存器
MOV AL,0AH ; 将 AL 寄存器中的值设为 10(即下一位的权值)
MUL CL ; 将 AX 寄存器中的值乘以 CL 寄存器中的值
ADD AL,DL ; 将 AL 寄存器中的值加上 DL 寄存器中的值
MOV CX,AX ; 将 AX 寄存器中的值存入 CX 寄存器
JMP NEXT ; 跳转到标签 NEXT,等待下一个数字输入
ERR: ; 标签,如果输入的不是数字,程序会跳转到此处
MOV CX,-1 ; 将 -1 存入 CX 寄存器
R1: ; 标签,如果输入的是回车或换行,程序会跳转到此处
RET ; 返回
INPUT ENDP ; 结束 INPUT 过程的定义
阅读全文