📄 00.asm
字号:
DSEG SEGMENT
num1 db 128,0,128 dup (?)
num2 db 128,0,128 dup (?)
num3 db 100 dup (?)
bag1 db 'the first num:','$'
bag2 db 0ah,0dh,'the second num:','$'
bag3 db 0ah,0dh,'the result:','$'
bag4 db 0ah,0dh,'press anykey to exit','$'
bag5 db 0ah,0dh,'please chose:1.add 2.sub :','$'
DSEG ENDS
sseg segment stack
dw 50 dup (0)
sseg ends
CSEG SEGMENT
assume cs:cseg,ds:dseg,ss:sseg
START:
MOV AX, DSEG
MOV DS, AX
mov ax, sseg
mov ss,ax
;******************input the first num*****************
lea dx,bag1
mov ah,9
int 21h
lea dx,num1
mov ah,0ah
int 21h
;******************intput the sceond num**************
lea dx,bag2
mov ah,9
int 21h
lea dx,num2
mov ah,0ah
int 21h
;lea si,num1
mov bl,num1[1]
mov bh,0
cmp bx,0
;jz exit
mov cl,num2[1]
mov ch,0
cmp cx,0
;jz exit
;********************************************************************
push bx
push cx
lea dx,bag5
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,'1'
jnz bug
call add1
jmp exit1
bug:
call sub1
exit1:
mov ah,4ch
int 21h
;*****************************************************************
;********************************加法*****************************
;*****************************************************************
add1 proc
push bp
mov bp,sp
mov cx,4[bp]
mov bx,6[bp]
mov dl,0
cmp bx,cx
ja again
;*******************************第一个数的位数少等于*******************
push cx
again1:
mov al,num1[bx+1]
sub al,30h
xchg bx,cx
add al,num2[bx+1]
sub al,30h
add al,dl
cmp al,10
jb go
mov dl,1
sub al,10
jmp hunt
go:
mov dl,0
hunt:
add al,30h
mov num2[bx+1],al
xchg bx,cx
dec bx
dec cx
cmp bx,0
jnz again1
mov di,dx
cmp cx,0
jz local1
top:
mov bx,cx
mov al,num2[bx+1]
cmp al,39h
jnz kick
mov al,30h
mov dl,1
mov num2[bx+1],al
loop top
jmp local1
kick:
add al,dl
mov dl,0
mov num2[bx+1],al
local1:
lea dx,bag3
mov ah,9
int 21h
mov dx,di
cmp dl,0
jz local2
add dl,30h
mov ah,2
int 21h
local2:
mov bx,1
pop cx
do:
mov dl,num2[bx+1]
mov ah,2
int 21h
add bx,1
cmp bx,cx
jna do
jmp exit
;***************************第一个数的位数多***************************
again:
push bx
mov dl,0
xchg bx,cx
again2:
mov al,num2[bx+1]
sub al,30h
xchg bx,cx
add al,num1[bx+1]
sub al,30h
add al,dl
cmp al,10
jb go1
mov dl,1
sub al,10
jmp hunt1
go1:
mov dl,0
hunt1:
add al,30h
mov num1[bx+1],al
xchg bx,cx
dec bx
dec cx
cmp bx,0
jnz again2
mov dh,0
mov di,dx
cmp cx,0
jz local3
top1:
mov bx,cx
mov al,num1[bx+1]
cmp al,39h
jnz kick1
mov al,30h
mov dl,1
mov num1[bx+1],al
loop top1
jmp local3
kick1:
add al,dl
mov dl,0
mov num1[bx+1],al
local3:
lea dx,bag3
mov ah,9
int 21h
mov dx,di
cmp dl,0
jz local4
add dl,30h
mov ah,2
int 21h
local4:
mov bx,1
pop cx
do1:
mov dl,num1[bx+1]
mov ah,2
int 21h
add bx,1
cmp bx,cx
jna do1
jmp exit
exit:
lea dx,bag4
mov ah,9
int 21h
mov ah,1
int 21h
pop bp
ret
add1 endp
;******************************************************************
;*******************************减法*******************************
;******************************************************************
sub1 proc
push bp
mov bp,sp
mov cx,4[bp]
mov bx,6[bp]
mov dl,0
cmp bx,cx
jna sbb1
;*************************第一个数的位数多*******************************
push bx
agago:
mov al,num1[bx+1]
add al,dl
xchg bx,cx
cmp al,num2[bx+1]
jae skip1
add al,10
sub al,num2[bx+1]
mov dl,-1
jmp skip2
skip1:
mov dl,0
sub al,num2[bx+1]
skip2:
xchg bx,cx
add al,30h
mov num1[bx+1],al
dec bx
loop agago
below:
cmp dl,0
jz spot
mov al,num1[bx+1]
cmp al,30h
jnz spot1
add al,10
add al,dl
jmp spot2
spot1:
add al,dl
mov dl,0
spot2:
mov num1[bx+1],al
dec bx
cmp bx,0
jnz below
spot:
pop cx
mov si,0
mov bx,1
;mov di,dx
lea dx,bag3
mov ah,9
int 21h
;mov dx,di
out1:
mov al,num1[bx+1]
cmp al,30h
jz step
mov si,1
step:
cmp si,1
jnz step1
mov dl,al
mov ah,2
int 21h
step1:
add bx,1
cmp bx,cx
jna out1
jmp exit2
;*******************************第一个数的位数等于************************
sbb1:
push cx
cmp cx,bx
jnz good3
mov si,1
mov di,2
mov dl,0
skip4:
add di,1
add cx,2
cmp di,cx
ja good1
sub cx,2
mov al,num1[di-1]
cmp al,num2[di-1]
jz skip4
add cx,2
cmp al,num2[di-1]
ja good1
mov si,0
jmp good1
good1:
cmp di,cx
jna td2
lea dx,bag3
mov ah,9
int 21h
mov dl,30h
mov ah,2
int 21h
pop cx
jmp exit2
td2:
sub cx,2
cmp si,1
jmp good2
good3:
jmp good
good2:
jnz good
td:
mov al,num1[bx+1]
add al,dl
cmp al,num2[bx+1]
jae look
add al,10
sub al,num2[bx+1]
mov dl,-1
;mov num1[bx+1],al
add al,30h
jmp look1
look:
mov dl,0
sub al,num2[bx+1]
add al,30h
look1:
mov num1[bx+1],al
dec bx
cmp bx,0
jnz td
lea dx,bag3
mov ah,9
int 21h
mov si,0
mov bx,1
out2:
mov al,num1[bx+1]
cmp al,30h
jz stap
mov si,1
stap:
cmp si,1
jnz stap1
mov dl,al
mov ah,2
int 21h
stap1:
add bx,1
cmp bx,cx
jna out2
pop cx
jmp exit2
;********************************第一个数的位数少*******************************
good:
mov dl,0
xchg cx,bx
tap:
mov al,num2[bx+1]
xchg cx,bx
add al,dl
cmp al,num1[bx+1]
jae tip
add al,10
mov dl,-1
sub al,num1[bx+1]
jmp tip1
tip:
mov dl,0
sub al,num1[bx+1]
tip1:
add al,30h
xchg bx,cx
mov num2[bx+1],al
dec bx
loop tap
below1:
cmp dl,0
jz seep
mov al,num2[bx+1]
cmp al,30h
jnz seep1
add al,10
add al,dl
jmp seep2
seep1:
add al,dl
mov dl,0
seep2:
mov num2[bx+1],al
dec bx
cmp bx,0
jnz below1
seep:
pop cx
mov si,0
mov bx,1
lea dx,bag3
mov ah,9
int 21h
mov dl,'-'
mov ah,2
int 21h
aut1:
mov al,num2[bx+1]
cmp al,30h
jz leas
mov si,1
leas:
cmp si,1
jnz leas1
mov dl,al
mov ah,2
int 21h
leas1:
add bx,1
cmp bx,cx
jna aut1
jmp exit2
exit2:
lea dx,bag4
mov ah,9
int 21h
mov ah,1
int 21h
pop bp
ret
sub1 endp
CSEG ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -