当前位置:文档之家› 简单的8086汇编程序(已加入详细注释)一位数加法

简单的8086汇编程序(已加入详细注释)一位数加法

;波波安WHJWNAVY注释,经供参考
;关于“+”
;注释过程中中发现一个问题,为什么代码中没有对“+”进行显示操作,因为之前我运行程序时都要输入“+”,而且运行结果正确,
;最后我在输入第二个数时不再输入“+”发现结果依然正确。其实这才是这段程序想表达的意思,本段代码没有对“+”、“=”进行处理。
CODE SEGMENT
ASSUME CS:CODE
START:
MOV CX,2;?
MOV BL,0;初始化BL
NEXT:
MOV AH,1
INT 21H;等待接收字符并回显,AL等于输入字符
SUB AL,30H;把所接收地第一个字符的ASCII码转换成相应的数值
JC NEXT;判断输入的是否为数字,比较其ASCII码,若小于30H,即说明输入字符不在0-9内(小于0)
CMP AL,9H
JA NEXT;判断其是否超出最大值9(此时AL已经转换为相应的数值,所以不再用其ASCII码值进行判断)。
ADD AL,BL ; **************注意
DAA;?
MOV BL,AL;把AL的值装入BL中,然后又用AL去接收第二个数值(返回NEXT处)。

MOV DL,13;回车
MOV AH,2;显示输出,DL=输出字符
INT 21H
MOV DL,10;换行
INT 21H
;AL的值已经装入BL中,接着又用AL去接收第二个数值(返回NEXT处)。
;注意,接收第二个数值同时完成了相加的操作,最终结果存于BL中(所以下方“NEXT1”处理结果时才会对BL进行操作)。
;见上方"*********注意"处。
LOOP NEXT
MOV CL,4;?
MOV DH,2;?
NEXT1:
ROL BL,CL
MOV DL,BL;把BL左移四位,然后把BL移入DL中
AND DL,0FH
;屏蔽掉DL的高四位?(最后结果可能为一个两位数,所以其十(高四位)位与个位(低四位)要分开显示。
;先显示十位,再显示个位,所以才把高四位移入低四位上,然后屏蔽掉高四位)
ADD DL,30H;把DL转换成相应的ASCII码,DL为数值,可以直接加30H进行转换
MOV AH,2;输出DL
INT 21H
DEC DH;循环次数减1(循环两次,分别显示十位和个位)
JNZ NEXT1;不为0则跳转
MOV AH,1;等待输入并回显,AL等于输入字符
INT 21H
MOV AH,4CH;带返回码结束?
INT 21H
CODE ENDS
END START

相关主题
文本预览
相关文档 最新文档