为什么 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。