📄 jiajian.asm
字号:
data segment
str1 db 20
db ?
db 20 dup(?)
str2 db 20
db ?
db 20 dup(?)
str3 db 20 dup(?)
db '$'
str4 db 'input the first data:$'
str5 db 'input the second data:$'
str6 db 'the result is:$'
ab db 0,0,0
data ends
;======================================
code segment
assume cs:code,ds:data
;=====================
start:
mov al,03h
mov ah,0h
int 10h
mov ah,2
mov bh,0h
mov dh,10
mov dl,20
int 10h ;光标 (10,20)
mov ax,data
mov ds,ax
mov dx,offset str4
mov ah,9h
int 21h
mov ah,0ah
mov dx,offset str1
int 21h ;输入数据1
;-----------------------------------
mov ah,2
mov bh,0
mov dh,12
mov dl,20
int 10h ;光标 (12,20)
mov ax,data
mov ds,ax
mov dx,offset str5
mov ah,9h
int 21h
mov ah,0ah
mov dx,offset str2
int 21h ;输入数据2
;=================================================================
mov al,str1+2
mov ah,str2+2
mov bl,1
cmp al,'-' ; 0:正 1:负
jnz j1
mov ab,bl ;设ab: str1的符号
j1:
cmp ah,'-' ; ab+1: str2的符号
jnz j2
mov ab+1,bl
j2:
mov bh,ab
cmp bh,ab+1
jz addjext
jmp near ptr subjext
;============================================加法
;----------------比较
addjext:
mov ax,data
mov ds,ax
mov es,ax
mov ah,str1+1
mov al,str2+1
cmp ah,al
jb le2
le1:
sub ah,al
mov dh,ah ;dh=chang-duan
mov cl,str1+1
mov ah,0
mov al,str1+1
mov si,offset str1+1
add si,ax
mov al,str2+1
mov di,offset str2+1
add di,ax
jmp jia
le2:
sub al,ah
mov dh,al ;比较后存入ab+1
mov cl,str2+1
mov ah,0
mov al,str2+1
mov si,offset str2+1
add si,ax
mov al,str1+1
mov di,offset str1+1
add di,ax
jia:
mov bx,offset str3+19
mov dl,0 ;进位 ----dl
mov ch,0
mov ah,ab
cmp ah,0
jz add1
sub cl,1
;---------------------------------加法内容
add1:
cmp cl,dh
jbe pan
mov al,[di]
sub al,30h
jmp add2
pan:
mov al,0
add2:
mov ah,[si]
sub ah,30h
add al,ah
add al,dl
mov dl,0
cmp al,0ah
jb jm1
sub al,0ah
mov dl,1
jm1:
add al,30h ;result------>al
mov [bx],al
dec bx
dec si
dec di
loop add1
;- - - - - -- - - -- - 符号
cmp dl,0
jnz jj
inc bx
jmp aj
jj: add dl,30h
mov [bx],dl
aj:
dec bx
mov ah,ab
cmp ah,0
jz fuhao
mov byte ptr [bx],'-'
fuhao:
jmp near ptr pab1
;=======================================================减法
;---------------------------------------确定情况
subjext:
mov ax,data
mov ds,ax
mov es,ax
mov ah,str1+2
cmp ah,'-'
jz state1
jmp near ptr state2
state1:
mov ah,str1+1
sub ah,1
cmp ah,str2+1
jnz sec_B
sec_A:
mov cl,ah
mov ch,0
mov si,offset str1+3
mov di,offset str2+2
a:
mov ah,[si]
mov al,[di]
inc si
inc di
cmp ah,al
loopz a
cmp cl,0
jnz c1
jmp near ptr ee
c1:
cmp ah,al
jb sec_b1
sec_a1:
mov al,str1+1
mov ah,0
mov si,offset str1+1
add si,ax
sub al,1
mov cl,al
mov ch,0
mov al,str2+1
mov di,offset str2+1
add di,ax
mov ah,cl
sub ah,al
mov dl,ah
mov al,1
mov ab+2,al
jmp jianfa
sec_b1:
mov ah,0
mov al,str2+1
mov si,offset str2+1
add si,ax
mov cl,al
mov ch,0
mov al,str1+1
mov di,offset str1+1
add di,ax
sub al,1
mov ah,cl
sub ah,al
mov dl,ah
mov al,0
mov ab+2,al
jmp jianfa
sec_B:
mov al,str2+1
cmp ah,al
ja sec_a1
jmp sec_b1
state2:
mov ah,str2+1
mov al,str1+1
sub ah,1
cmp ah,al
jnz sec_D
sec_C:
mov cl,ah
mov ch,0
mov si,offset str2+3
mov di,offset str1+2
b:
mov ah,[si]
mov al,[di]
inc si
inc di
cmp ah,al
loopz b
cmp cl,0
jnz c2
jmp near ptr ee
c2:
cmp ah,al
jb sec_d1
sec_c1:
mov ah,0
mov al,str2+1
mov si,offset str2+1
add si,ax
sub al,1
mov cl,al
mov ch,0
mov al,str1+1
mov di,offset str1+1
add di,ax
mov ah,cl
sub ah,al
mov dl,ah
mov al,1
mov ab+2,al
jmp jianfa
sec_d1:
mov ah,0
mov al,str1+1
mov si,offset str1+1
add si,ax
mov cl,al
mov ch,0
mov al,str2+1
mov di,offset str2+1
add di,ax
mov ah,cl
sub al,1
sub ah,al
mov dl,ah
mov al,0
mov ab+2,al
jmp jianfa
sec_D:
cmp ah,al
ja sec_c1
jmp sec_d1
;- - - - - - - - - - - - - - ---- - - -- - -- 减法内容
jianfa:
mov bx,offset str3+19
mov dh,0 ;dh--借位
jinx:
cmp cl,dl
jle ji1
mov al,[di]
sub al,30h
jmp ji2
ji1:
mov al,0
ji2:
mov ah,[si]
sub ah,30h
sub ah,dh
cmp ah,al
jl ji3
sub ah,al
mov dh,0
jmp jiex
ji3:
add ah,10
sub ah,al
mov dh,1
jiex:
add ah,30h
mov [bx],ah
dec si
dec di
dec bx
loop jinx
;-----------------------符号
mov ah,ab+2
cmp ah,0
je pab
mov byte ptr [bx],'-'
jmp pab1
pab:
add bx,1
pab1:
;===============================
mov bh,0
mov dh,14
mov dl,20 ;光标 (14,20)
mov ah,2
int 10h
mov dx,offset str6
mov ah,09h
int 21h ;显示 str6
mov dx,bx
mov ah,09h
int 21h ;显示 result
;==============================
mov ah,4ch
int 21h
;----------------------------------
ee:
mov bh,0
mov dh,14
mov dl,20
mov ah,2
int 10h
mov dx,offset str6
mov ah,09h
int 21h
mov al,'0'
mov ah,09h
mov cx,1
mov bl,7
int 10h
mov ah,4ch
int 21h
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -