我想将十六进制数转换为相应的ASCII。为此,我需要从输入中获取每个数字并转换为相应的ASCII。我知道这可以用十进制来完成,只需要将余数分成几小部分,但我在十六进制中遇到问题。任何帮助?
答案 0 :(得分:1)
对于十进制,你可以重复除以所需的基数,这是16。问题是,你不能轻易得到十六进制字符,因为ASCII表在这一点上不是连续的:
'0'=> 30H
...
'9'=> 39H
的 GAP 强>
'A'=> 41H
...
'F'=> 46H
获得例如其余10中的'A',你必须在之后添加7 转换为ASCII。例如:
.MODEL small
.STACK 1000h
.DATA
number dw 09A8Fh
hexstring db 4 DUP (?)
last_hex EQU ($ - 1)
terminator db '$'
.CODE
main PROC
mov ax, @data
mov ds, ax
mov cx, 16 ; Base 16 (hexadecimal)
mov di, last_hex
mov ax, number
L1:
xor dx, dx ; Don't forget it!
div cx
or dl, 30h ; Convert remainder to ASCII
cmp dl, '9'
jbe @F ; Jump to next @@
add dl, 7 ; Adjust ASCII
@@:
mov [di], dl ; Store ASCII
dec di ; Move DI backwards
test ax, ax ; AX == 0?
jne L1 ; No: once more
lea dx, hexstring
mov ah, 9
int 21h
mov ax, 4C00h
int 21h
main ENDP
END main