我发现这个页面有一个 Linux 上 x86-64 的 Hello World 示例:
http://blog.markloiseau.com/2012/05/64-bit-hello-world-in-linux-assembly-nasm/
; 64-bit "Hello World!" in Linux NASM
global _start ; global entry point export for ld
section .text
_start:
; sys_write(stdout, message, length)
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
mov rsi, message ; message address
mov rdx, length ; message string length
syscall
; sys_exit(return_code)
mov rax, 60 ; sys_exit
mov rdi, 0 ; return 0 (success)
syscall
section .data
message: db 'Hello, world!',0x0A ; message and newline
length: equ $-message ; NASM definition pseudo-instruction
作者说:
一个表示 system_write 调用的整数值被放置在第一个寄存器中,然后是它的参数。当系统调用及其参数都在其适当的寄存器中时,系统被调用并显示消息。
- 他所说的“适当的”寄存器是什么意思/什么是不“适当的”寄存器?
- 如果我有一个函数的参数比我的寄存器多,会发生什么?
- 是否
rax
总是指向函数调用(这总是系统调用?)?这是它唯一的目的吗?