⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dad.asm

📁 两位十进制数的四则运算
💻 ASM
字号:
;二位十进制计算
fo macro p1 ;输出字符串
	mov ah,9h
	mov dx,offset &p1
	int 21h
	endm
fl macro	;清屏
	mov ah,06
	mov al,0
	mov bh,0
	mov cx,0
	mov dh,24
	mov dl,79
	int 10h
	endm
d1 macro	;余数乘10除以被除数
	pop dx
	mov ax,dx
	mov x,100d
	mul x
	mov dx,0
	div yy
	endm
data segment ;数据段
jia db 'add +','$'
jian db 'sub -','$'
chen db 'mul *','$'
chu db 'div /','$'
lk db 'exit','$'
err db ' error!','$'
be1 db 'Press up and down to choose','$'
be2 db 'Press enter to get in!','$'
ti db 'Ji Suan Qi','$'
mak db '---Zip.Boy.New','$'
ver db 'version 1.0','$'
jshu db 0
ts db 'press any key to continue(esc quit).','$'
z1	db 'input first number: ','$'
z2	db 'input second number: ','$'
z3	db 'the result is: ','$' 
fh	db '-','$'
yu	db '.','$'
x	db 0h
y	db 0h
xx 	dw 0h
yy	dw 0h
data ends

code segment
	assume cs:code,ds:data
start:	mov ax,data
	mov ds,ax
;=============================
;清全屏为蓝色	
;=============================
xuanj:	mov dh,0 ;列
	mov dl,0 ;行
	mov ah,2		
	int 10h  ;置光标于(0,0)
	mov ah,9 
	mov al,' '  ;字符
	mov bh,0    ;显示页
	mov bl,1fh  ;背景色为黑
	mov cx,80*25 ;字符重复次数
	int 10h   ;光标位置显示字符及其属性
	call zcd		;画主菜单
;-----------------------------------
xuan:	mov dh,10
	mov dl,34
	call xcd
	mov dh,10	;选单jia高亮
	mov dl,37
	mov ah,2
	int 10h
	fo jia
;-----------------------------------
deng:	xor ax,ax	;等待键盘输入
	int 16h
	cmp al,27
	jz aexi		;esc退出
	cmp ax,5000h	;判断是否为向下
	jnz shang	;不是则转到判断是否向上
	inc jshu	;向下则计数器加一
	jmp xia		;进入画高亮菜单段
shang:	cmp ax,4800h
	jnz hch
	cmp jshu,0	;计数器为0则循环置为4
	jnz wjx
	mov jshu,4
	jmp xia
wjx:	dec jshu	;计数器减一
	jmp xia		;进入画高亮菜单段
hch:	cmp al,0dh	;跳转缓冲/判断是否为回车
	jz jsuan
	jmp deng
aexi:	mov jshu,4
jsuan:	cmp jshu,0
	jz s1		;进入加法运算
	cmp jshu,1
	jz s2		;进入减法运算
	cmp jshu,2
	jz hhcch		;进入乘法运算
	cmp jshu,3
	jz hhcc		;进入除法运算
	jmp exit
hhcch:  jmp s3
hhcc:	jmp s4
s1:	call zcx	;画程序运算窗口
	mov dh,6	;加法运算
	mov dl,22
	mov ah,2
	int 10h
	fo z1 ;输出提示1
	call numb
	mov xx,cx
	mov dh,7	
	mov dl,22
	mov ah,2
	int 10h
	fo z2   ;输出提示2
	call numb
	add cx,xx
	mov dh,8	
	mov dl,22
	mov ah,2
	int 10h
	fo z3  ;输出提示3
	mov bx,cx	
	call cmpc
okk:	call resu
	mov dl,al
	add dl,30h
ok1:	mov ah,2
	int 21h
	sub cx,1
	cmp cx,0
	jnz okk
	jmp et	;跳转到判断是否结束的代码段
s2:	call zcx
	mov y,3
	mov dh,6	;输出减
	mov dl,22
	mov ah,2
	int 10h
	fo z1 ;输出提示1
	call numb
	mov xx,cx
	mov dh,7	
	mov dl,22
	mov ah,2
	int 10h
	fo z2   ;输出提示2
	call numb
	cmp xx,cx
	jb fushu
	sub xx,cx
	mov cx,xx
	jmp goo
fushu:	sub cx,xx
	mov y,1
goo:	mov dh,8	
	mov dl,22
	mov ah,2
	int 10h
	fo z3  ;输出提示3
	cmp y,2
	jb fuhao
	jmp gooo
fuhao:	fo fh  ;输出负号
gooo:	mov bx,cx		
	call cmpc
okj:	call resu
	mov dl,al
	add dl,30h
	mov ah,2
	int 21h
	sub cx,1
	cmp cx,0
	jnz okj
	jmp et
s3:	call zcx
	mov dh,6	;乘法运算
	mov dl,22
	mov ah,2
	int 10h
	fo z1 ;输出提示1
	call numb
	mov xx,cx
	mov dh,7	
	mov dl,22
	mov ah,2
	int 10h
	fo z2   ;输出提示2
	call numb
	mov ax,cx
	mul xx
	mov cx,ax
	mov dh,8	
	mov dl,22
	mov ah,2
	int 10h
	fo z3  ;输出提示3
	mov bx,cx		
	call cmpc
okc:	call resu
	mov dl,al
	add dl,30h
	mov ah,2
	int 21h
	sub cx,1
	cmp cx,0
	jnz okc
	jmp et
s4:	call zcx
	mov dh,6	;除法运算
	mov dl,22
	mov ah,2
	int 10h
	fo z1 ;输出提示1
	call numb
	mov xx,cx
	mov dh,7	
	mov dl,22
	mov ah,2
	int 10h
	fo z2   ;输出提示2
	call numb
	cmp cx,0
	jnz chuf
	fo err
	jmp et
chuf:	mov yy,cx
	mov ax,xx
	mov dx,0
	div yy
	push dx
	mov cx,ax
	mov dh,8	
	mov dl,22
	mov ah,2
	int 10h
	fo z3  ;输出提示3
	mov bx,cx		
	call cmpc
okq:	call resu
	mov dl,al
	add dl,30h
	mov ah,2
	int 21h
	sub cx,1
	cmp cx,0
	jnz okq
	fo yu  ;小数
	d1
	push dx
	call d2
	d1
	push dx
	call d2
	d1
	push dx
	call d2
	d1
	call d2
et:	mov bx,0
	mov dh,12		;判断是否结束程序
	mov dl,22
	mov ah,2
	int 10h
	fo ts	;输出选择提示
xz2:	mov ah,7h		;选择
	int 21h
	cmp al,27
	jz axit		
	jmp hhc2
axit:	jmp exit
hhc2:	mov jshu,0
	jmp xuanj
;----------------------------------
;画高亮菜单
;----------------------------------
xia:	call zcd	;画主菜单
	cmp jshu,0
	jz hhc		;跳转缓冲
	cmp jshu,1
	jz zjian
	cmp jshu,2
	jz zchen
	cmp jshu,3
	jz zchu
	cmp jshu,4
	jz zlk
	mov jshu,0
	jmp xia
hhc:    jmp xuan
zjian:	mov dh,11
	mov dl,34
	call xcd
	mov dh,11	;选单jian高亮
	mov dl,37
	mov ah,2
	int 10h
	fo jian
	jmp deng
zchen:	mov dh,12
	mov dl,34
	call xcd
	mov dh,12	;选单chen高亮
	mov dl,37
	mov ah,2
	int 10h
	fo chen
	jmp deng
zchu:	mov dh,13
	mov dl,34
	call xcd
	mov dh,13	;选单chu高亮
	mov dl,37
	mov ah,2
	int 10h
	fo chu
	jmp deng
zlk:	mov dh,14
	mov dl,34
	call xcd
	mov dh,14	;选单exit高亮
	mov dl,37
	mov ah,2
	int 10h
	fo lk
	jmp deng

exit:	fl
	mov ah,4ch
	int 21h

xcd	proc near
	mov ah,2
	int 10h
	mov ah,9
	mov al,' '
	mov bh,0
	mov bl,94h
	mov cx,12
	int 10h
	ret
xcd endp
;--------------------------------------
;画主菜单
;--------------------------------------	
zcd proc near
	push ax
	push bx
	push cx
	push dx
	mov dh,3
	mov dl,35
	mov ah,2
	int 10h
	fo ti
	mov dh,5
	mov dl,26
	mov ah,2
	int 10h	
	fo be1
	mov dh,6
	mov dl,28
	mov ah,2
	int 10h	
	fo be2
	mov dh,21
	mov dl,65
	mov ah,2
	int 10h
	fo mak
	mov dh,22
	mov dl,68
	mov ah,2
	int 10h
	fo ver
	mov dh,9 	; 行 菜单(9,34)--(15,46)红色背景,白色字
	mov dl,34 ;列
cd1:	mov ah,2
	int 10h  ;10h-2
	mov ah,9
	mov al,' '
	mov bh,0
	mov bl,77h
	mov cx,12
	int 10h  ;10h-9
	inc dh
	cmp dh,16
	jnz cd1
	mov dh,10	
	mov dl,35
cd:	mov ah,2
	int 10h
	mov ah,9
	mov al,' '
	mov bh,0
	mov bl,4fh
	mov cx,10
	int 10h
	inc dh
	cmp dh,15
	jnz cd
	mov dh,10	;输出选单+
	mov dl,37
	mov ah,2
	int 10h
	fo jia
	mov dh,11	;输出选单-
	mov dl,37
	mov ah,2
	int 10h
	fo jian
	mov dh,12	;输出选单*
	mov dl,37
	mov ah,2
	int 10h
	fo chen
	mov dh,13	;输出选单/
	mov dl,37
	mov ah,2
	int 10h
	fo chu
	mov dh,14	;输出选单exit
	mov dl,37
	mov ah,2
	int 10h
	fo lk
	pop dx
	pop cx
	pop bx
	pop ax
	ret
zcd endp
zcx proc near    ;计算界面
	mov dh,5
	mov dl,20
hui:	mov ah,2
	int 10h
	mov ah,9
	mov al,' '
	mov bh,0
	mov bl,0fh
	mov cx,40
	int 10h
	inc  dh
	cmp dh,17
	jnz hui
	ret
zcx endp
numb proc near ;数字输入
abc:	mov ah,07h  ;十位
	int 21h
	cmp al,27
	jz exi
	cmp al,'0'
	jb abc
	cmp al,'9'
	jg abc
	mov dl,al
	mov ah,02h
	int 21h
	sub al,30h
	mov x,10
	mul x
	mov cx,ax
	sub ax,ax
bbb:	mov ah,07h	;个位
	int 21h
	cmp al,27
	jz exi
	cmp al,'0'
	jb bbb
	cmp al,'9'
	jg bbb
	mov dl,al
	mov ah,02h
	int 21h
	mov x,1
	mul x
	sub al,30h
	add cx,ax
	ret
exi:	fl
	mov ah,4ch
	int 21h
numb endp
cmpc proc near	;比较出bx的位数
	cmp bx,1000
	jb c100
	mov cx,4
	jmp c0
c100:	cmp bx,100
	jb c10
	mov cx,3
	jmp c0
c10:	cmp bx,10
	jb c1
	mov cx,2
	jmp c0
c1:	mov cx,1
c0:	ret
cmpc endp
resu proc near ;输出bx
	cmp cx,4
	jnz cx3
	mov ax,bx
	mov dx,0
	mov xx,1000d
	div xx
	jmp cx0
cx3:	cmp cx,3
	jnz cx2
	mov ax,bx
	mov dx,0
	mov xx,100d
	div xx
	jmp cx0
cx2:	cmp cx,2
	jnz cx1
	mov ax,bx
	mov dx,0
	mov xx,10d
	div xx
	jmp cx0
cx1:	cmp cx,1
	jnz cx0
	mov ax,bx
	mov dx,0
	mov xx,1d
	div xx
cx0:	mov bx,dx
	ret
resu endp
d2 proc near	;输出余数
	mov bx,ax		
	call cmpc
oky:	call resu
	mov dl,al
	add dl,30h
	mov ah,2
	int 21h
	sub cx,1
	cmp cx,0
	jnz oky
	ret
d2 endp
code ends
	end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -