?? chengxu.asm
字號:
data segment
mesg1 db 'Please choose a number(1,2,3,4,5,6,7,8) to apply it: ',0ah ,0dh,0ah ,0dh
db 'if you want to quit,please hit q OR Q! ',0ah ,0dh ,0ah ,0dh
;系統(tǒng)提示信息
db '1.Small letter to capital letter',0ah ,0dh , 0ah ,0dh ;八種不同的選擇提示
db '2.Capital letter to small letter',0ah ,0dh,0ah ,0dh
db '3.BIN to HEX',0ah ,0dh ,0ah ,0dh ,0ah ,0dh
db '4.HEX to BIN',0ah ,0dh,0ah ,0dh ,0ah ,0dh
db '5.DEC to BIN',0ah ,0dh,0ah ,0dh
db '6.BIN to DEC',0ah ,0dh,0ah ,0dh
db '7.HEX to DEC',0ah ,0dh,0ah ,0dh
db '8.DEC to HEX',0ah ,0dh,0ah ,0dh ,'$'
mesg2 db 'You have input a invalid number!Please select again:',0ah ,0dh ,0ah ,0dh,'$'
;選擇無效提示
mesg3 db 'Please input a small letter:',0ah ,0dh,0ah ,0dh ,'$' ;
mesg4 db 'Its capital letter is',0ah ,0dh,0ah ,0dh ,'$'
mesg5 db 'Please input a capital letter:',0ah ,0dh,'$'
mesg6 db 0ah,0dh
db'Its small letter is:',0ah ,0dh,0ah ,0dh ,'$'
mesg7 db 'Please input a bin number:',0ah ,0dh,0ah ,0dh ,'$'
mesg8 db 'Please input a dec number:',0ah ,0dh,0ah ,0dh ,'$'
mesg9 db 'Please input a hex number:',0ah ,0dh,0ah ,0dh ,'$'
mesg10 db 0ah,0dh
db'Its bin number is',0ah ,0dh,'$'
mesg11 db 0ah,0dh
db'Its dec number is',0ah ,0dh,'$'
mesg12 db 0ah,0dh
db'Its hex number is',0ah ,0dh,'$'
mesg13 db 0ah,0dh,0ah ,0dh
db 'haha,thank you for your using! ^!^',0ah ,0dh,'$'
data ends
prognam segment
main proc far
assume cs:prognam,ds:data
start:
push ds
xor ax,ax ;ax寄存器清零
push ax
mov ax,data
mov ds,ax
again:
lea dx,mesg1 ;9號調(diào)用,顯示mesg1內(nèi)容
mov ah,09h
int 21h
repeat:
mov ah,1 ;1號調(diào)用,鍵盤輸入一個字符,存AL入中
int 21h
cmp al,31h ;AL內(nèi)容與1-8分別做減運(yùn)算,以選擇不同的菜單項(xiàng)
je L1 ;AL內(nèi)容減31H(1)為零,則跳轉(zhuǎn)執(zhí)行L1.以下同理
cmp al,32h
je L2
cmp al,33h
je L3
cmp al,34h
je L4
cmp al,35h
je L5
cmp al,36h
je L6
cmp al,37h
je L7
cmp al,38h
je L8
cmp al,'Q' ;若輸入Q或者q,則跳出程序
je exit
cmp al,'q'
je exit
lea dx,mesg2 ;輸入字符無效,則顯示錯誤信息,并跳回到repeat
mov ah,9
int 21h
jmp repeat
L1:
call small_capital ;調(diào)用子程序small-capital,實(shí)現(xiàn)小寫到大寫字母的轉(zhuǎn)換
call crlf ;調(diào)用子程序crlf,輸出結(jié)果并顯示
jmp again ;跳轉(zhuǎn)到again,重新給入measg1的菜單提示
L2:
call capital_small ;調(diào)用子程序capital-small,實(shí)現(xiàn)大寫到小寫字母的轉(zhuǎn)換
call crlf
jmp again
L3:
call binhex ;調(diào)用子程序binhex,實(shí)現(xiàn)二進(jìn)制數(shù)到十六進(jìn)制數(shù)的轉(zhuǎn)換
call crlf
jmp again
L4:
call hexbin ;調(diào)用子程序hexbin,實(shí)現(xiàn)十六進(jìn)制數(shù)到二進(jìn)制數(shù)的轉(zhuǎn)換
call crlf
jmp again
L5:
call decibin ;調(diào)用子程序decibin,實(shí)現(xiàn)由十進(jìn)制數(shù)到二進(jìn)制數(shù)的轉(zhuǎn)換
call crlf
jmp again
L6:
call bindec ;調(diào)用子程序bindec,實(shí)現(xiàn)二進(jìn)制數(shù)到十進(jìn)制數(shù)的轉(zhuǎn)換
call crlf
jmp again
L7:
call hexdec ;調(diào)用hexdec,實(shí)現(xiàn)十六進(jìn)制數(shù)到十進(jìn)制數(shù)的轉(zhuǎn)換
call crlf
jmp again
L8:
call dechex ;調(diào)用dechex,實(shí)現(xiàn)十進(jìn)制數(shù)到十六進(jìn)制數(shù)的轉(zhuǎn)換
call crlf
jmp again
exit: ;定義exit
lea dx,mesg13
mov ah,9
int 21h
call delay ;調(diào)用延時程序delay
ret
main endp
small_capital proc near ;定義子程序small-capital
xor ax,ax
lea dx,mesg3 ;顯示meag3的內(nèi)容,提示輸入信息(小寫字母)
mov ah,9
int 21h
mov ah,1 ;1號調(diào)用,從鍵盤輸入單字符存如AL
int 21h
sub al,20h ;AL中的內(nèi)容與20h相減(將小寫轉(zhuǎn)換成大寫),結(jié)果存入AL
push ax ;AX入棧
lea dx,mesg4 ;顯示mesg4的內(nèi)容
mov ah,9
int 21h
pop ax ;AX內(nèi)容出棧
mov dl,al
mov ah,2 ;輸出并顯示結(jié)果
int 21h
ret
small_capital endp
capital_small proc near ;定義capital_small
xor ax,ax ;AX清零
lea dx,mesg5 ;顯示mesg5的內(nèi)容,提示輸入信息(大寫字母)
mov ah,9
int 21h
mov ah,1 ;從鍵盤輸入單字符
int 21h
add al,20h ;AL中的內(nèi)容加20h(將大寫轉(zhuǎn)換成小寫),結(jié)果存入AL
push ax ;AX入棧
lea dx,mesg6 ;顯示mesg4的內(nèi)容
mov ah,9
int 21h
pop ax
mov dl,al
mov ah,2 ;輸出并顯示結(jié)果
int 21h
ret
capital_small endp
binhex proc near
xor ax,ax
mov bx,ax
lea dx,mesg7 ;顯示mesg7的內(nèi)容,提示輸入信息(輸入二進(jìn)制數(shù))
mov ah,9
int 21h
mov si,4
newchar:
mov ah,1
int 21h
sub al,30h ; al的內(nèi)容與30H(0)比較
jl rotate ;小于0,跳轉(zhuǎn)到rotate
cmp al,02h ; al的內(nèi)容與02H(2)比較
jl add_to ;小于02h,跳轉(zhuǎn)到add_to
jmp rotate
add_to:
mov cl,1
shl bx,cl ;bx左移1位
mov ah,0
add bx,ax
jmp newchar ;跳轉(zhuǎn)到newchar
rotate:
lea dx,mesg12 ;顯示mesg12
mov ah,9
int 21h
rotate1_1:
mov cl,4
rol bx,cl ;bx循環(huán)左移4位
mov al,bl
and al,0fh ;al與0fh作與運(yùn)算(高四位清零)
add al,30h ;al與30h作加法運(yùn)算
cmp al,3ah ;al與3aH作減運(yùn)算
jl print ;小于則跳轉(zhuǎn)到print
add al,7h ;al與7H作加法運(yùn)算,結(jié)果置于AL中
print:
mov dl,al
mov ah,2 ;2號調(diào)用,輸出顯示單字符
int 21h
dec si ;SI減一
jnz rotate1_1 ;si不為零,則跳轉(zhuǎn)至rotate1_1
ret
binhex endp
hexbin proc near ;定義子程序hexbin(十六進(jìn)制數(shù)到二進(jìn)制數(shù)的轉(zhuǎn)換)
mov bx,0
lea dx,mesg9 ;顯示輸出mesg9中的字符串
mov ah,9
int 21h
mov si,16 ;定義指針SI
newchar1:
mov ah,1 ;鍵盤輸入單字符
int 21h
sub al,30h
jl print1 ;小于0,則跳轉(zhuǎn)至print1
cmp al,02H
jl add_to ;小于二,跳轉(zhuǎn)至add_to
sub al,27h
cmp al,0ah
jl print
cmp al,02H
jge print1
add_to1:
mov cl,4
shl bx,cl
mov ah,0
add bx,ax
jmp newchar1
lea dx,mesg10
mov ah,9
int 21h
print1:
rol bx,1
mov al,bl
and al,1h
add al,30h
mov dl,al
mov ah,2
int 21h
dec si
jnz print1
ret
hexbin endp
decibin proc near
lea dx,mesg8
mov ah,9
int 21h
mov bx,0
newchar2:
mov ah,1
int 21h
sub al,30h
jl print3
cmp al,9d
jg print3
cbw
xchg ax,bx
mov cx ,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar2
print3:
lea dx,mesg10
mov cl,7
mov ch,10h
print4:
mov al,bh
and al,80h
shr al,cl
add al,30h
shl bx,1
mov dl,al
mov ah,2
int 21h
dec ch
jnz print4
ret
decibin endp
bindec proc near
lea dx,mesg7
mov ah,9
int 21h
newchar3:
mov ah,1
int 21h
sub al,30h
jl prints
cmp al,10d
jl add_to2
jmp print
add_to2:
mov cl,1
shl bx,cl
mov ah,0
add bx,ax
jmp newchar3
prints:
lea dx,mesg11
mov ah,9
int 21h ;display dec
mov cx,10000d
call dec_div
mov cx,1000
call dec_div
mov cx,100
call dec_div
mov cx,10
call dec_div
mov cx,1
call dec_div
ret
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2
int 21h
ret
dec_div endp
bindec endp
hexdec proc near
lea dx,mesg9
mov ah,9
int 21h
mov bx,0
newchar4:
mov ah,1
int 21h
sub al,30h
jl next
cmp al,10d
jl add_to5
sub al,27h
cmp al,0ah
jl next
cmp al,10h
jge next
add_to5:
mov cl,4
shl bx,cl
mov ah,0
add bx,ax
jmp newchar4
next:
lea dx,mesg11
mov ah,9
int 21h
mov cx,10000d
call dec_divs
mov cx,1000d
call dec_divs
mov cx,100d
call dec_divs
mov cx,10d
call dec_divs
mov cx,1d
call dec_divs
ret
dec_divs proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2
int 21h
ret
dec_divs endp
hexdec endp
dechex proc near ;定義子程序dechex,實(shí)現(xiàn)十進(jìn)制數(shù)到十六進(jìn)制數(shù)的轉(zhuǎn)換
lea dx,mesg11
mov ah,9
int 21h
mov bx,0
newchars3:
mov ah,1 ;鍵盤給入字符(十進(jìn)制數(shù))
int 21h
sub al,30h ;小于0,跳轉(zhuǎn)執(zhí)行next1
jl next1
cmp al,9d ;大于09H,也執(zhí)行next1
jg next1
cbw ;AL中的數(shù)擴(kuò)展十六位
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchars3
next1:
mov si,4
lea dx,mesg12
mov ah,9
int 21h
call crlf
rotates:
mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printg
add al,7h
printg:
mov dl,al
mov ah,2
int 21h
dec si
jnz rotates
ret
dechex endp
crlf proc near ;定義子程序crlf,作為回車操作
mov dl,13
mov ah,2
int 21h
mov dl,10
mov ah,2
int 21h
ret
crlf endp
delay proc ;延時程序delay的定義
push cx
push bx
mov cx,0ffffh
dl3:
mov bx,0ffffh
dl4:
dec bx ;bx減一操作,不為零,則跳轉(zhuǎn)重新執(zhí)行d14
jnz dl4
dec cx ;cx作減一操作,不為0,跳轉(zhuǎn)執(zhí)行d13
jnz dl3
pop bx
pop cx
ret
delay endp
prognam ends
end start
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -