, 64- /X , C. C System, , _main
. _start
- , , , .
64- ββ macho64 . Apple OS/X , System V x86-64 ABI 3.4:

, NULL (0). , NULL (0) argc
.
, , SYSCALL. SYSCALL RCX R11:
SYSCALL 0. , RIP MSR IA32_LSTAR ( , SYSCALL RCX). ( WRMSR , MS32 IA32_LSTAR .)
SYSCALL RFLAGS R11, RFLAGS, MS32- IA32_FMASK (MSR- C0000084H); , RFLAGS , , IA32_FMASK MSR
- , RCX R11. / SYSCALL , , . clobber RAX .
Apple OS/X . 64- OS/X 0x2000000 :
64- Mach , 0x2000000, POSIX 0x1000000
. . , NUL (0).
:
mov 8(%rcx), %rcx
mov $0x2000004, %eax
mov $0x20, %rsi
mov $2, %rdx
syscall
sys_write
RSI . , 0x20 (). - ( ) RSI.
( ) . . Darwin OS/X 0x0a
(\n
).
SYS_EXIT = 0x2000001
SYS_WRITE = 0x2000004
STDOUT = 1
.section __DATA, __const
newline: .ascii "\n"
newline_end: NEWLINE_LEN = newline_end-newline
.section __TEXT, __text
.globl _main
_main:
mov (%rsp), %r8
lea 16(%rsp), %rbx
.argloop:
mov (%rbx), %rsi
test %rsi, %rsi
jz .exit
xor %edx, %edx
mov %edx, %eax
.strlenloop:
inc %rdx
cmpb %al, -1(%rsi,%rdx)
jne .strlenloop
dec %rdx
mov $STDOUT, %edi
mov $SYS_WRITE, %eax
syscall
mov $NEWLINE_LEN, %edx
lea newline(%rip), %rsi
mov $SYS_WRITE, %eax
syscall
add $8, %rbx
jmp .argloop
.exit:
xor %edi, %edi
mov $SYS_EXIT, %eax
syscall
strlen
, , . strlen
. strlen
, Agner Fog .
C, :
gcc -e _main progargs.s -o progargs -nostartfiles -static