2014-02-22 37 views
1

我知道你可以添加48从十进制转换为ascii或减去48从ASCII转换为十进制,但为什么下面的代码也执行相同的转换?NASM汇编从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' 
+0

你应该谈论数字,而不是数字。 –

+0

只要'eax'中的数字是'0'和'9'之间的一个十进制数字,它就会工作。由于ASCII'0'减去'0'是数字'0',所以ASCII'1'减去'0'是数字'1',依此类推。如果你有更大的数字,你可以将它们按位数进行转换。 – lurker

+0

仅供参考:https://duckduckgo.com/asciitable.html –

回答

1

'0'同样工作到48因为'0'对于字符0其中,在ASCII,确实48码点。

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

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以上的值,则需要将值分解为单个数字并逐个处理它们。