我知道你可以添加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'
答案 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
请注意,此方法仅适用于从0
到9
的值。如果您想处理9以上的值,您需要将值分解为单个数字并一次处理一个。