汇编实例3——两数相加

汇编实例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 

汇编实例3——两数相加_第1张图片

注意:

  1. 只能计算10以内的两个数相加
  2. 等待键盘输入的字符存放在AL中
  3. XOR 异或运算  1 XOR 1 = 0         0 XOR 0 = 0      1 XOR 0 = 1      0 XOR 1 = 1 
  4. 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高四位清零;

你可能感兴趣的:(汇编语言)