?? dad.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 + -