目的
编写十进制到十六进制转换程序。要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来
设计思路
设计子函数readchar用于读入操作,利用循环语句input进行循环读入,对读入的每一个字符进行判断,若读入字符在’0’-'9’之外,则结束输入,且每一次输入后将前一次输入的总和×10。设计子函数convert用于将bx中保存的10进制数字转化为16进制并输出。
程序代码
assume cs:code,ds:data
data segment
str1 db 0AH,'Input decimal number: ','$'
str2 db 0AH,'hexadecimal number: ','$'
data ends
code segment
start:
mov ax,data
mov ds,ax
main:
call readchar
call convert
mov ah,4ch
int 21h
readchar proc near: ;读入函数
lea dx,str1
mov ah,09
int 21h
mov bx,0
input:
mov ah,01h
int 21h
cmp al,'9' ;输入数字之外的字符,就结束输入
ja exit
cmp al,'0'
jb exit
sub al,'0' ;把字符转换为数字
mov ah,0h ;避免ah数值的影响
mov dx,ax
mov ax,bx
mov bx,dx
mov cx,0ah
mul cx ; 把之前输入的数乘以10,加上本次输入,保存到bx
mov dx,ax
mov ax,bx
mov bx,dx
add bx,ax
jmp input
exit:
ret
readchar endp
convert proc near: ;转换函数
lea dx,str1
mov ah,09
mov ch,04h
loopc:
mov cl,04h
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,'9'
jbe printf ;字符为'9'之下,直接显示。
add al,07h ;大于9的数字转换为'A'-'F'
printf:
mov dl,al
mov ah,2
int 21h
dec ch
jne loopc ; 单独用ch进行循环操作
ret
convert endp
code ends
end start