Assembly add'的含义;0';和sub';0';装配中

Assembly add'的含义;0';和sub';0';装配中,assembly,x86,Assembly,X86,我从中复制了此代码。 我不明白下面三行是什么意思: section .text global _start ;must be declared for using gcc _start: ;tell linker entry point mov eax,'3' sub eax, '0' mov ebx, '4' sub ebx, '0' add eax, ebx add eax,

我从中复制了此代码。
我不明白下面三行是什么意思:

section .text
   global _start    ;must be declared for using gcc
    
_start:             ;tell linker entry point
   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   ;file descriptor (stdout)
   mov  eax,4   ;system call number (sys_write)
   int  0x80    ;call kernel
    
   mov  ecx,sum
   mov  edx, 1
   mov  ebx,1   ;file descriptor (stdout)
   mov  eax,4   ;system call number (sys_write)
   int  0x80    ;call kernel
    
   mov  eax,1   ;system call number (sys_exit)
   int  0x80    ;call kernel
    
section .data
   msg db "The sum is:", 0xA,0xD 
   len equ $ - msg   
   segment .bss
   sum resb 1

请注意,在
mov eax中,'3'
您正在移动一个字符-因此
eax
的值在此指令后为0x33(ASCII码为'3')。
通过(再次)减去字符
'0'
(即0x30),可以将数字字符转换为其实际值0x03。
类似地,通过添加
'0'
可以将一位数的值转换回相应的字符


在这种固定硬编码值的情况下,这没有多大意义,但在从终端获取输入的示例中,您只能获得字符输入,并且必须转换为实际的数值。

注意,在
mov eax中,'3'
您正在移动一个字符-因此
eax
的值在此指令之后为0x33(ASCII码为'3')。
通过(再次)减去字符
'0'
(即0x30),可以将数字字符转换为其实际值0x03。
类似地,通过添加
'0'
可以将一位数的值转换回相应的字符


在这种固定硬编码值的情况下,这没有多大意义,但在从终端获取输入的示例中,您只获得字符输入,必须转换为实际数值。

用于从ascii转换和转换为ascii。请咨询。您将看到数字具有代码
0x30-0x39
。用于从ascii转换和转换为ascii。Consult an.您将看到数字具有代码
0x30-0x39
sub  eax, '0'
sub  ebx, '0'
add  eax, '0'