汇编实例3——两数相加
汇编实例3——两数相加DATA SEGMENTINFOR1 DB"Please input the frist data(<10):$"INFOR2 DB0AH,0DH,"Please input the second data(<10):$"INFOR3 DB0AH,0DH,"The result is:$ "DATA E...
·
汇编实例3——两数相加
DATA SEGMENT
INFOR1 DB "Please input the frist data(<10):$"
INFOR2 DB 0AH,0DH,"Please input the second data(<10):$"
INFOR3 DB 0AH,0DH,"The result is:$ "
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START :
MOV AX ,DATA
MOV DS,AX
MOV DX ,OFFSET INFOR1 ;显示提示信息1
MOV AH,09H
INT 21H
MOV AH,01H ;输入
INT 21H ;此时等待用户输入,输入的第一个加数存放在AL中
sub AL,30H
MOV BL,AL ;放到BL
MOV DX ,OFFSET INFOR2 ;显示提示信息2
MOV AH,09H
INT 21H
MOV AH,01H ;另一个加数放在AL中
INT 21H
sub AL,30H
MOV DX ,OFFSET INFOR3 ;显示提示信息3
MOV AH,09H
INT 21H
XOR AH,AH ; 异或 将AH清零,CF标志位也会清零
add AL,BL ; 相加
AAA ; 调整
push AX ;输出结果
MOV DL,AH
add DL,30H
MOV AH,02H
INT 21H
pop AX
MOV DL,AL
add DL,30H
MOV AH,02H
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START

注意:
- 只能计算10以内的两个数相加
- 等待键盘输入的字符存放在AL中
- XOR 异或运算 1 XOR 1 = 0 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 1 = 1
- AAA是汇编里ASCII码加法调整指令 当执行完MOV AX,'9'时结果ax里面是ox0039,因为9的ASICII码为那么多行完第二条ADD AL,'9'时ax里面是OX0072,因为他是按照十六进制相加的执行完第三条指令时,ax里面变为OX0108,即得到十进制数18(9+9=18)。
AAA执行条件是:如果AL得低4位大于9或者(AF)=1,
则:(AL)=(AL)+6
(AH)=(AH)+1
(AF)=(CF)=1
否则:(AF)=(CF)=0 AL高四位清零;
更多推荐


所有评论(0)