为什么 sub eax, '0' 用于添加而不是仅仅添加?
Why sub eax, '0' for adding instead of just add?
所以,我一直在努力学习一些汇编,我看到了一个加法的例子,但我不太明白一件事:
section .text
global _start
_start:
mov eax, '3'
sub eax, '0'
mov ebx, '4'
sub ebx, '0'
add eax, ebx
add eax, '0'
mov [sum], eax
mov ecx, msg
mov edx, len
mov ebx, 1
mov eax, 4
int 0x80
mov ecx, sum
mov edx, 1
mov ebx, 1
mov eax, 4
int 0x80
mov eax, 1
int 0x80
section .data
msg db 'The sum is:',0xA, 0xD
len equ $ - msg
segment .bss
sum resb
除了sub eax, '0'
我都懂
我的意思是结果应该是 -7 因为当它出现时 sub eax, '0'
它会反转数字...
... because when it does sub eax, '0' it inverses the num
减法sub eax, '0'
将AL
中的字符转换为对应的数字0-9。仅此而已。
应该写成:
sub al, '0'
指令add al, '0'
以同样的方式将AL
中的数字(范围0-9)转换为准备输出的字符。
I mean the result should be -7
如果您 运行 该程序,您会看到输出为正数 7。
所以,我一直在努力学习一些汇编,我看到了一个加法的例子,但我不太明白一件事:
section .text
global _start
_start:
mov eax, '3'
sub eax, '0'
mov ebx, '4'
sub ebx, '0'
add eax, ebx
add eax, '0'
mov [sum], eax
mov ecx, msg
mov edx, len
mov ebx, 1
mov eax, 4
int 0x80
mov ecx, sum
mov edx, 1
mov ebx, 1
mov eax, 4
int 0x80
mov eax, 1
int 0x80
section .data
msg db 'The sum is:',0xA, 0xD
len equ $ - msg
segment .bss
sum resb
除了sub eax, '0'
我的意思是结果应该是 -7 因为当它出现时 sub eax, '0'
它会反转数字...
... because when it does sub eax, '0' it inverses the num
减法sub eax, '0'
将AL
中的字符转换为对应的数字0-9。仅此而已。
应该写成:
sub al, '0'
指令add al, '0'
以同样的方式将AL
中的数字(范围0-9)转换为准备输出的字符。
I mean the result should be -7
如果您 运行 该程序,您会看到输出为正数 7。