Actualmente estoy aprendiendo el lenguaje ensamblador en Linux. He estado usando el libro 'Programming From the Ground Up' y todos los ejemplos son de 32 bits. Mi sistema operativo es de 64 bits y he estado tratando de hacer todos los ejemplos en 64 bits. Sin embargo, tengo problemas:x86_64 Ensamblaje Sistema Linux Confusión de llamadas
.section .data
.section .text
.global _start
_start:
movq $60, %rax
movq $2, %rbx
int $0x80
Esto simplemente llama a la llamada al Sistema de salida de Linux o debería. En su lugar, causa un SEG FALLO y cuando en su lugar hago esto
.section .data
.section .text
.global _start
_start:
movq $1, %rax
movq $2, %rbx
int $0x80
funciona. Claramente, el problema es el valor que muevo a% rax. El valor de $ 1 que uso en el segundo ejemplo es lo que se dice 'Programación desde cero', pero varias fuentes en Internet han dicho que el número de llamada del sistema de 64 bits es de $ 60. Reference ¿Qué estoy haciendo mal? Además, ¿qué otros problemas debo tener en cuenta y qué debo usar para una referencia? En caso de que necesite saber, estoy en el Capítulo 5 en Programación desde la base.
Probablemente voy a terminar haciendo eso. Gracias por su respuesta. –
Uno debe usar '% rdi' para el primer argumento de llamada del sistema, no'% rbx'. –
Gracias por atrapar eso - arreglado. – duskwuff