Inputting 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
具有字符验证和溢出检测的snippet 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
1条答案
按热度按时间6bc51xsx1#
Inputting multi-radix multi-digit signed numbers with DOS在答案的代码片段 2a 和 2b 中显示了如何进行这种特殊的转换。您还可以学习如何从八进制转换为二进制。
不要被“DOS”这个词所误导。许多原则都是一样的,如果你目前还不知道,这将是一个很好的起点。你可以根据你的需要和技能水平来修改代码。如果这不起作用,那么你可以提出一个问题,包括你已经尝试过的代码。
下面是对上述片段的改编:
代码片段 2a
具有字符验证和溢出检测的snippet 2b