¿Cómo escribir el programa hello world en lenguaje ensamblador para Mac OS X de 64 bits usando printf?

Estoy tratando de aprender a escribir lenguaje ensamblador para Mac OS de 64 bits. No tengo ningún problema con Mac OS de 32 bits y Linux de 32 bits y 64 bits.

Sin embargo, Mac OS 64 bit es diferente y no pude entenderlo. Por lo tanto, estoy aquí para pedir ayuda.

No tengo problemas para usar la llamada al sistema para imprimir. Sin embargo, me gustaría aprender cómo llamar a las funciones C usando el lenguaje ensamblador de 64 bits de Mac OS.

Por favor mire el siguiente código

.data
_hello:
    .asciz "Hello, world\n"


.text
.globl _main
_main:
    movq $0, %rax
    movq _hello(%rip), %rdi
    call _printf

Uso $ gcc -arch x86_64 hello.s

para ensamblar y vincular.

Genera código binario. Sin embargo, recibí un error de segmentación al ejecutarlo.

Intenté agregar "subq $ 8,% rsp" antes de llamar a _printf, todavía el mismo resultado que antes.

¿Qué hice mal

Por cierto, ¿es esa la forma de depurar este código en Mac? Intenté agregar -ggdb o -gstab o -gDWARF, y $ gdb ./a.out, y no puedo ver el código y establecer puntos de interrupción.

Respuestas a la pregunta(2)

Su respuesta a la pregunta