Pointers 英特尔32位处理器上的mov指令
我是汇编语言方面的新手,我正在尝试使用NASM学习linux上的英特尔32位汇编语言,并遵循以下步骤。关于这个例子,我有一些问题:Pointers 英特尔32位处理器上的mov指令,pointers,assembly,x86,nasm,32-bit,Pointers,Assembly,X86,Nasm,32 Bit,我是汇编语言方面的新手,我正在尝试使用NASM学习linux上的英特尔32位汇编语言,并遵循以下步骤。关于这个例子,我有一些问题: section .text global _start ;must be declared for using gcc _start: ;tell linker entry point mov edx, len ;message length mov ecx, msg ;mess
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov edx, len ;message length
mov ecx, msg ;message to write
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 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
我知道,name db'Zara Ali'
是name db'Z'、'a'、'r'、'a'…
回答你的第二个问题。否,使用“int 0x80”指令仅进行一次系统调用。然后控制权被转移到sys_write,并将所有这些字符写入标准输出。此代码中没有jmp指令或循环,从中可以看到代码是按顺序执行的,没有跳转(不包括仅调用一次的系统调用本身)。
mov ecx,name
将name
的地址移动到ecx
,而不是该地址的内容。系统调用,sys\u write
,写出整个字符串。这就是为什么长度作为参数传递给sys\u write
(链接示例中的mov-edx,len
指令)。您可以在线查询系统调用以获取描述。只需在“LinuxSys_write”上进行谷歌搜索。哦,是的,你说得对,谢谢!