我正在学习alp(x86)。我最近偶然发现了一个用于显示存储在数组中的字符的程序,这些程序基本上是十六进制形式。为了显示它们我们应该将它们转换为ascii然后显示它们
;display procedure for 64bit
display:
mov rsi,char_answer+15
mov rcx,16
cnt: mov rdx,0
mov rbx,16h
div rbx
cmp dl,09h
jbe add30
add dl,07h
add30: add dl,30h
mov [rsi],dl
dec rsi
dec rcx
jnz cnt
scall 1,1,char_answer,16
ret
所以在上面的代码中,我无法理解为什么我们要比较09h,然后加30h或07h。
三江源。
答案 0 :(得分:3)
在ASCII及其后续版本中,十进制数字映射在0x30..0x39范围内,前六个字母(十六进制数字为10到15)映射在0x41..0x46范围内。一旦该过程提取了一个十六进制数字,为了将其转换为表示其值的ASCII代码,如果该数字在0..9范围内,则需要添加0x30,如果该数字,则需要添加0x41-0x0A = 0x37在A..F。
范围内这是汇编语言中常见的习语。