将用户输入的无符号十进制数(不超过4位)变成十六进制的形式输出 测试数据:1234,5,7008,66
DATAS SEGMENT
str1 db 0AH,'Input decimal number: ','$'
str2 db 0AH,'hexadecimal number: ','$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
call input ;调用读取的子程序
call convert ;调用转换的子程序
MOV AH,4CH ;程序结束
INT 21H
input proc near
lea dx,str1 ;调用09号功能输出提示字符串
mov ah,09
int 21h
leagal1:
mov ah,01h ;功能:按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。
int 21h
cmp al,'9' ;将输入的字符进行比较,不合法就退出
ja exit
cmp al,'0'
jb exit
sub al,'0'
mov ah,0h
;以7008为例
mov dx,ax ;将新数7-0-0-8 给dx
mov ax,bx ;bx 存的是之前的数要去做乘10运算
mov bx,dx ;把新数给bx 在个位 待会儿直接做加法
mov cx,0ah ;cx的值是10
mul cx
;mov dx,ax ;是16*16 = 32 位 所以dx是高字位 由于本题 dx是0 ax是结果
;mov ax,bx
;mov bx,dx
add bx,ax
jmp leagal1
exit:
ret
input endp
convert proc near
lea dx,str2
mov ah,09
int 21h
mov ch,04h
mov cl,04h
loopc:
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,'9'
jbe printf
add al,07h
printf:
mov dl,al
mov ah,2
int 21h
dec ch
jne loopc
ret
convert endp
CODES ENDS
END START