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
(これは常にシステム コールですか?)? それが唯一の目的ですか?