1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| assume cs:code,ds:data
data segment str1 db 0AH,'Input decimal number: ','$' str2 db 0AH,'Hexadecimal number: ','$' result db 8 dup('$') data ends
code segment start: mov ax, data mov ds, ax mov es, ax call readchar call convert mov ah, 4ch int 21h
readchar proc near ;读入函数 lea dx, str1 mov ah, 09h int 21h mov bx, 0 input: mov ah, 01h int 21h cmp al, 0dh ; 判断是否回车键,回车键结束输入 je exit 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, str2 mov ah, 09h int 21h 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, 02h int 21h dec ch jnz loopc ; 单独用ch进行循环操作 ret convert endp
code ends end start
|