繁体   English   中英

在汇编中将十六进制字符串转换为二进制 x86 MASM

[英]Convert Hexadecimal String to Binary in Assembly x86 MASM

例如,我有: n1 db "1234"表示一个十六进制值。 我想将它转换为二进制并将其存储在 32 位寄存器中,在这种情况下,结果将是: EAX = 0000 0000 0000 0000 0001 0010 0011 0100

方法是什么?

Input multi-radix multi-digit signed numbers with DOS显示了如何在答案的代码片段2a2b中进行此特定转换。 您还可以学习如何从八进制和二进制转换。
不要被提及“DOS”所误导。 许多原则保持不变,如果您目前一无所知,这将是一个很好的起点。 您可以根据您的需要和技能水平更改代码。 如果这不起作用,那么您可以发布一个问题,包括您尝试过的代码。

这是对上述片段的改编:

片段2a

    ; Hexadecimal
.a: inc   esi             ; Next character
    shl   eax, 4          ; Result = Result * 16
    movzx edx, byte [esi] ; -> DL = {["0","9"],["A","F"]} (NewDigit)
    cmp   dl, "9"
    jbe   .b
    sub   edx, 7
.b: sub   edx, 48
    or    eax, edx        ; Result = Result + NewDigit
    dec   ecx
    jnz   .a

带有字符验证和溢出检测的片段2b

    ; Hexadecimal
.a: inc   esi             ; Next character
    movzx edx, byte [esi] ; -> DL = {["0","9"],["A","F"]} (NewDigit) ?
    cmp   dl, "9"
    jbe   .b
    sub   edx, 7
.b: sub   edx, 48
    cmp   dl, 15
    ja    .z              ; Stop if not a digit
    rol   eax, 4          ; Result = Result * 16
    test  al, 15
    jnz   .o              ; Overflow
    or    eax, edx        ; Result = Result + NewDigit
    dec   ecx
    jnz   .a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM