NASM程序集从ASCII转换为十进制

时间:2014-02-22 19:36:17

标签: assembly type-conversion decimal ascii nasm

我知道你可以添加48来从十进制转换为ascii或减去48以从ascii转换为十进制,但为什么以下代码也执行相同的转换?

; moving the first number to eax register and second number to ebx
; and subtracting ascii '0' to convert it into a decimal number
mov eax, [number1]
sub eax, '0'

; add '0' to to convert the sum from decimal to ASCII
add eax, '0'

1 个答案:

答案 0 :(得分:2)

'0'48的工作方式完全相同,因为'0'字符 0的代码点,在ASCII中确实是48 { {1}}。

因此所有这些都是等价的:

sub  al, 48          ; decimal
sub  al, '0'         ; character code
sub  al, 30h         ; hex
sub  al, 0x30        ; hex again
sub  al, 60q         ; octal
sub  al, 00110000b   ; binary

请注意,此方法仅适用于从09的值。如果您想处理9以上的值,您需要将值分解为单个数字并一次处理一个。