📄 yfh.asm
字号:
dat segment
a db 10 dup(0)
b db 10 dup(0)
y db 10 dup(0)
x db 11 dup(0)
z db 20 dup(0)
c db 20 dup(0)
d db ?
e db "shu ru 10 weiyi nei de si ze yun suan: ",0ah,0dh,"$"
f db "shu ru cuo wu, qing cong xin$"
g db "hai yao ji xu yun suan ma(y/n)[n]?$"
dat ends
cod segment
assume cs:cod,ds:dat
start:
mov ax,dat
mov ds,ax
begin:
mov ah,9
lea dx,e
int 21h
mov cx,10
mov bx,0
ql:
mov a[bx],0
mov b[bx],0
mov y[bx],0
mov x[bx],0
mov [z+10][bx],0
mov [c+10][bx],0
inc bx
loop ql
mov x+10,0
mov cx,10
mov bx,0
ql2:
mov z[bx],0
mov c[bx],0
inc bx
loop ql2 ;qingling
mov cx,10
mov bx,0
mov ah,1
ina:
int 21h
cmp al,"+"
jne l1
mov d,al
jmp movea
l1:
cmp al,"-"
jne l2
mov d,al
jmp movea
l2:
cmp al,"*"
jne l3
mov d,al
jmp movea
l3:
cmp al,"/"
jne l4
mov d,al
jmp movea
l4:
cmp al,30h
jb err
cmp al,39h
ja err
and al,0fh
mov a[bx],al
inc bx
loop ina
int 21h
cmp al,"+"
jne l5
mov d,al
jmp inb
l5:cmp al,"-"
jne l6
mov d,al
jmp inb
l6:cmp al,"*"
jne l7
mov d,al
jmp inb
l7:cmp al,"/"
jne err
mov d,al
jmp inb
err:
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
int 21h
mov ah,9
lea dx,f
int 21h
jmp begin
movea:
mov si,cx
mov cx,bx
dec bx
mova:
mov al,a[bx]
mov a[bx][si],al
mov a[bx],0
dec bx
loop mova
inb:
mov cx,10
mov bx,0
mov ah,1
l8:
int 21h
cmp al,"="
jne l9
jmp moveb
l9:
cmp al,30h
jb err
cmp al,39h
ja err
and al,0fh
mov b[bx],al
inc bx
loop l8
int 21h
cmp al,"="
jne err
jmp cmpd
moveb:
mov dx,10
sub dx,cx
mov si,cx
mov cx,dx
dec bx
movb:
mov al,b[bx]
mov b[bx][si],al
mov byte ptr b[bx],0
dec bx
loop movb
cmpd:
cmp d,"+"
jne h1
jmp j_add
h1:
cmp d,"-"
jne h2
jmp j_sub
h2:
cmp d,"*"
jne h3
jmp c_mul
h3: jmp c_div
j_add:
mov cx,10
mov bx,9
clc
j_ad:
mov al,a[bx]
adc al,b[bx]
aaa
mov [x+1][bx],al
dec bx
loop j_ad
adc x,0
mov cx,11
mov bx,10
h4:
mov al,x[bx]
mov [c+9][bx],al
dec bx
loop h4
jmp out_c
j_sub:
mov cx,10
mov bx,0
bj:
mov al,a[bx]
cmp al,b[bx]
ja j_sub1
jb j_sub2
inc bx
loop bj
j_sub1:
mov cx,10
mov bx,9
clc
j_su1:
mov al,a[bx]
sbb al,b[bx]
aas
mov y[bx],al
dec bx
loop j_su1
mov cx,10
mov bx,9
h5:
mov al,y[bx]
mov [c+10][bx],al
dec bx
loop h5
jmp out_c
j_sub2:
mov ah,2
mov dl,2dh
int 21h
mov cx,10
mov bx,9
clc
j_su2:
mov al,b[bx]
sbb al,a[bx]
aas
mov y[bx],al
dec bx
loop j_su2
mov cx,10
mov bx,9
h6:
mov al,y[bx]
mov [c+10][bx],al
dec bx
loop h6
jmp out_c
c_mul:
mov bx,9
h7:
mov si,9
mov [x+1][si],0
mov cx,10
h8:
mov al,a[si]
mul b[bx]
aam
add al,[x+1][si]
aaa
mov [x+1][si],al
mov x[si],ah
dec si
loop h8
mov cx,11
mov di,10
clc
h9:
mov al,z[di][bx]
adc al,x[di]
aaa
mov z[di][bx],al
dec di
loop h9
cmp bx,0
je m1
dec bx
jmp h7
m1:mov cx,20
mov bx,0
m2:mov al,z[bx]
mov c[bx],al
inc bx
loop m2
jmp out_c
c_div:
mov cx,10
mov bx,0
m3:
mov al,a[bx]
cmp al,b[bx]
ja jian
jb outc
inc bx
loop m3
mov cx,10
mov bx,0
m4:
mov al,a[bx]
cmp al,0
jne jian
inc bx
loop m4
jmp outc
jian:
mov cx,10
mov bx,9
clc
m5:
mov al,a[bx]
sbb al,b[bx]
aas
mov a[bx],al
dec bx
loop m5
jadd:
mov bx,9
clc
mov al,y[bx]
adc al,1
aaa
mov y[bx],al
dec bx
mov cx,9
m6:
mov al,y[bx]
adc al,0
aaa
mov y[bx],al
dec bx
loop m6
jmp c_div
outc:
mov cx,10
mov bx,0
mov ah,2
m7:
mov al,y[bx]
cmp al,0
jne m8
inc bx
loop m7
mov dl,30h
int 21h
jmp sys
m8:
mov dl,y[bx]
or dl,30h
int 21h
inc bx
loop m8
sys:
mov cx,10
mov bx,0
k1:
mov al,a[bx]
cmp al,0
jne k2
inc bx
loop k1
jmp ts
k2:
push cx
mov cx,1
k3:
mov dl,"!"
int 21h
pop cx
k4:
mov dl,a[bx]
or dl,30h
int 21h
inc bx
loop k4
out_c:
mov cx,20
mov ah,2
mov bx,0
cmp0:mov al,c[bx]
cmp al,0
jne out_c1
inc bx
loop cmp0
mov dl,30h
int 21h
jmp ts
out_c1:
mov dl,c[bx]
or dl,30h
int 21h
inc bx
loop out_c1
mov dl,0ah
int 21h
mov dl,0dh
int 21h
ts:
mov ah,9
lea dx,g
int 21h
mov ah,7
int 21h
cmp al,"y"
jne cmpy
jmp hc
cmpy:
cmp al,"Y"
jne exit_dos
hc:
mov ah,2
mov dl,0ah
int 21h
mov dl,0dh
int 21h
jmp begin
exit_dos:
mov ah,4ch
int 21h
cod ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -