[英]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显示了如何在答案的代码片段2a和2b中进行此特定转换。 您还可以学习如何从八进制和二进制转换。
不要被提及“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.