汇编实现从键盘输入两个10进制的2位整数的和

; 编程实现从键盘输入两个10进制的2位整数的和。

stack segment
db 10 dup(?)  ;定义10个不确定的值“?”放入指定的内存单元。
stack ends


data segment
;显示提示语句
    string_1 db 'input num a: $'
    string_2 db 0ah,0dh,'input num b: $'  ;0dh 表示回车符号,这只是一个表示这一行终止的符号,不可见的,
    string_3 db 0ah,0dh,'a+b= $'   ;0Ah表示换行,就是跳转到下一行,两者同时用表示回车换行!
    A1 DB ?
    A2 DB ?
    SUM DB ?
data ends



assume cs:code
code segment
start:
    mov ax,data
    mov ds,ax
    
    ;显示提示
    lea dx,string_1  ;lea将有效地址传送到指定的的寄存器
    mov ah,09h    ;实现DOS调用中的09号功能,就是在屏幕上显示字符串
    int 21h     ;是命令系统工作的意思,至于做什么工作,就看你往AH里面放了什么代码。
    
    
    ;输入第一个数的十位
    mov ah,01h  ;调用DOS,从键盘输入字符并存放在al。
    int 21h
    mov bl,al
    sub bl,30h   ;输入了一个数后,这是一个字符,如果你要变成10进制的数,就要减去30h
    
    
    ;输入第一个数的个位
    mov ah,01h  ;调用DOS,从键盘输入字符并存放在al。
    int 21h
    sub al,30h
    mov bh,al
    
    mov al,10
    mul bl     ;BL*AL=AX 第一个数的十位乘十 存放在AX中 
    add al,bh  ;八位和十六位类型不匹配,所以个位加到AL中 
    mov A1,al  ;将第一位数字存放在A1里面
    lea dx,string_2
    mov ah,09h
    int 21h
    ;输入第二个数的十位
    mov ah,01h
    int 21h
    mov bl,al
    sub bl,30h
    
    ;输入第二个数的个位
    mov ah,01h
    int 21h
    sub al,30h
    mov bh,al
    mov al,10
    mul bl      ;BL*AL=AX 第二个数的十位乘十 存放在AX中 
    add al,bh   ;八位和十六位类型不匹配,所以个位加到AL中 
    mov A2,al   ;将第二位数字存放在A2里面
    mov al,A1
    add al,A2   ;A1 A2相加
    
    lea dx,string_3
    mov ah,09h
    int 21h
    
    mov ah,0
    mov bl,10
    div bl      ;AX/BL=AL...AH
    mov bh,ah   ;个位放在BH里面
    add bh,30h  ;个位转化为ASCII码
    
    mov ah,0
    div bl      ;AL里面的百位十位再除以十 AX(AL)/10=AL...AH
    mov cx,ax
    add cx,3030h

    
    ;输出百位
    mov ah,2
    mov dl,cl
    int 21h
    
    ;输出十位
    mov ah,2
    mov dl,ch
    int 21h
    
    ;输出个位
    mov ah,2
    mov dl,bh
    int 21h
    mov ax,4c00h
    int 21h
    
code ends
end start

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值