📄 wenjia.asm
字号:
data segment
str1 db 20
db ?
db 20 dup(?)
str2 db 20
db ?
db 20 dup(?)
str4 db 'input bei jiashu:$'
str5 db 'input jiashu:$'
str6 db "the result is:"
str3 db 20 dup(?),'$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov es,ax
mov ah,0
mov al,3 ;文本 16*8
int 10h
mov ah,2 ;置框表类型
mov bh,0 ;页数
mov dh,10 ;行数
mov dl,25 ;列数
int 10h
mov ah,9 ;显示字符串
mov dx,offset str4
int 21h
mov ah,0ah ;输入被加数
mov dx,offset str1
int 21h
mov ah,2 ;置框表类型
mov bh,0 ;页数
mov dh,12 ;行数
mov dl,25 ;列数
int 10h
mov ah,9 ;显示字符串
mov dx,offset str5
int 21h
mov ah,0ah ;输入加数
mov dx,offset str2
int 21h
mov si,offset str1+2
mov cl,str1+1
mov ch,0
again1:
mov al,[si] ;将字符1转化为数据
and al,0fh
mov [si],al
inc si
loop again1
mov di,offset str2+2
mov cl,str2+1
mov ch,0
again2:
mov al,[di] ;将字符2转化为数据
and al,0fh
mov [di],al
inc di
loop again2
mov si,offset str1+1 ;1长度偏移地址
mov di,offset str2+1 ;2长度偏移地址
mov bl,str1+1 ;1长度
cbw ;将BL扩展为BX
adc si,bx ;移到被加数第一个参与数的地址
mov al,str2+1
cbw
adc di,ax ;移到加数第一个参与数的地址
cmp bl,al ;比较二者长短
jae cha ;被加数长的就跳到CHA
xchg si,di ;若加数长,则交换操作数
xchg bl,al ;交换指令
cha:
push bx ;将长的长度进栈
sub bl,al
mov dx,bx ;两长度之差
mov ch,0
pop bx
lea bx,str3[bx] ;取得和的偏移地址
mov cx,ax ;循环次数
clc ;进位位置0
lop1:
mov al,[di] ;短
add al,[si] ;加
cmp al,0ah ;判断是否>=10
jae lp1 ;有进位则跳到LP1
or al,30h
mov [bx],al ;无进位则将内容放到和中
dec si ;从左到右
dec di
dec bx
loop lop1
mov byte ptr[bx],0
mov cx,dx
jcxz done ;cx=0循环结束跳转
jmp lop2
lp1:
sub al,0ah
or al,30h
mov [bx],al
dec di
dec si
dec bx
add byte ptr[si],1 ;进位加一个字节
loop lop1
mov cx,dx ;将余下未加的
jcxz done
lop2:
mov al,byte ptr[si]
cmp al,0ah ;判断进位
jae lp2
or al,30h
mov [bx],al ;无进位则直接搬下来
dec bx
dec si
loop lop2
jmp done
mov cx,dx
lp2:
sub al,0ah ;有进位时
or al,30h
mov [bx],al
dec di
dec si
dec bx
add byte ptr[si],1 ;进位加一
cmp si,1
jz lp3
cmp di,1
jz lp3 ;有进位
loop lop2
lp3:
mov byte ptr[bx],1
mov al,byte ptr[bx]
or al,30h
mov byte ptr[bx],al ;结束
done:
mov ah,2
mov bh,0
mov dh,14
mov dl,25
int 10h
mov ah,09h
mov dx,offset str6
int 21h
mov ah,2
mov bh,0
mov dh,14 ;行数
mov dl,45 ;列数
int 10h
mov ah,4ch
int 21h
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -