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'