📄 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
;系统提示信息
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号调用,显示mesg1内容
mov ah,09h
int 21h
repeat:
mov ah,1 ;1号调用,键盘输入一个字符,存AL入中
int 21h
cmp al,31h ;AL内容与1-8分别做减运算,以选择不同的菜单项
je L1 ;AL内容减31H(1)为零,则跳转执行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 ;调用子程序small-capital,实现小写到大写字母的转换
call crlf ;调用子程序crlf,输出结果并显示
jmp again ;跳转到again,重新给入measg1的菜单提示
L2:
call capital_small ;调用子程序capital-small,实现大写到小写字母的转换
call crlf
jmp again
L3:
call binhex ;调用子程序binhex,实现二进制数到十六进制数的转换
call crlf
jmp again
L4:
call hexbin ;调用子程序hexbin,实现十六进制数到二进制数的转换
call crlf
jmp again
L5:
call decibin ;调用子程序decibin,实现由十进制数到二进制数的转换
call crlf
jmp again
L6:
call bindec ;调用子程序bindec,实现二进制数到十进制数的转换
call crlf
jmp again
L7:
call hexdec ;调用hexdec,实现十六进制数到十进制数的转换
call crlf
jmp again
L8:
call dechex ;调用dechex,实现十进制数到十六进制数的转换
call crlf
jmp again
exit: ;定义exit
lea dx,mesg13
mov ah,9
int 21h
call delay ;调用延时程序delay
ret
main endp
small_capital proc near ;定义子程序small-capital
xor ax,ax
lea dx,mesg3 ;显示meag3的内容,提示输入信息(小写字母)
mov ah,9
int 21h
mov ah,1 ;1号调用,从键盘输入单字符存如AL
int 21h
sub al,20h ;AL中的内容与20h相减(将小写转换成大写),结果存入AL
push ax ;AX入栈
lea dx,mesg4 ;显示mesg4的内容
mov ah,9
int 21h
pop ax ;AX内容出栈
mov dl,al
mov ah,2 ;输出并显示结果
int 21h
ret
small_capital endp
capital_small proc near ;定义capital_small
xor ax,ax ;AX清零
lea dx,mesg5 ;显示mesg5的内容,提示输入信息(大写字母)
mov ah,9
int 21h
mov ah,1 ;从键盘输入单字符
int 21h
add al,20h ;AL中的内容加20h(将大写转换成小写),结果存入AL
push ax ;AX入栈
lea dx,mesg6 ;显示mesg4的内容
mov ah,9
int 21h
pop ax
mov dl,al
mov ah,2 ;输出并显示结果
int 21h
ret
capital_small endp
binhex proc near
xor ax,ax
mov bx,ax
lea dx,mesg7 ;显示mesg7的内容,提示输入信息(输入二进制数)
mov ah,9
int 21h
mov si,4
newchar:
mov ah,1
int 21h
sub al,30h ; al的内容与30H(0)比较
jl rotate ;小于0,跳转到rotate
cmp al,02h ; al的内容与02H(2)比较
jl add_to ;小于02h,跳转到add_to
jmp rotate
add_to:
mov cl,1
shl bx,cl ;bx左移1位
mov ah,0
add bx,ax
jmp newchar ;跳转到newchar
rotate:
lea dx,mesg12 ;显示mesg12
mov ah,9
int 21h
rotate1_1:
mov cl,4
rol bx,cl ;bx循环左移4位
mov al,bl
and al,0fh ;al与0fh作与运算(高四位清零)
add al,30h ;al与30h作加法运算
cmp al,3ah ;al与3aH作减运算
jl print ;小于则跳转到print
add al,7h ;al与7H作加法运算,结果置于AL中
print:
mov dl,al
mov ah,2 ;2号调用,输出显示单字符
int 21h
dec si ;SI减一
jnz rotate1_1 ;si不为零,则跳转至rotate1_1
ret
binhex endp
hexbin proc near ;定义子程序hexbin(十六进制数到二进制数的转换)
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,则跳转至print1
cmp al,02H
jl add_to ;小于二,跳转至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,实现十进制数到十六进制数的转换
lea dx,mesg11
mov ah,9
int 21h
mov bx,0
newchars3:
mov ah,1 ;键盘给入字符(十进制数)
int 21h
sub al,30h ;小于0,跳转执行next1
jl next1
cmp al,9d ;大于09H,也执行next1
jg next1
cbw ;AL中的数扩展十六位
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减一操作,不为零,则跳转重新执行d14
jnz dl4
dec cx ;cx作减一操作,不为0,跳转执行d13
jnz dl3
pop bx
pop cx
ret
delay endp
prognam ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -