x86 alp中的十六进制到Ascii转换

时间:2018-04-04 02:46:29

标签: assembly x86-64

我正在学习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。

三江源。

1 个答案:

答案 0 :(得分:3)

在ASCII及其后续版本中,十进制数字映射在0x30..0x39范围内,前六个字母(十六进制数字为10到15)映射在0x41..0x46范围内。一旦该过程提取了一个十六进制数字,为了将其转换为表示其值的ASCII代码,如果该数字在0..9范围内,则需要添加0x30,如果该数字,则需要添加0x41-0x0A = 0x37在A..F。

范围内

这是汇编语言中常见的习语。