; 编程实现从键盘输入两个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进制的2位整数的和
最新推荐文章于 2024-05-08 16:36:10 发布