我发现了这个页面,其中有一个关于在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
是否总是指向函数调用(这将始终是系统调用)?那是它唯一的目的吗?