Attualmente sto imparando il linguaggio Assembly su Linux. Ho usato il libro 'Programming From the Ground Up' e tutti gli esempi sono a 32 bit. Il mio sistema operativo è 64-bit e ho cercato di fare tutti gli esempi in 64-bit. Tuttavia, sto riscontrando dei problemi:x86_64 Confusione chiamata sistema di assi Linux
.section .data
.section .text
.global _start
_start:
movq $60, %rax
movq $2, %rbx
int $0x80
Questo semplicemente chiama la chiamata di sistema di uscita Linux o dovrebbe. Invece provoca un SEG FAULT e quando invece lo faccio,
.section .data
.section .text
.global _start
_start:
movq $1, %rax
movq $2, %rbx
int $0x80
funziona. Chiaramente il problema è il valore che sposto in% rax. Il valore $ 1 che uso nel secondo esempio è 'Programming From the Ground Up', che dice di utilizzare comunque più fonti su Internet hanno affermato che il numero di sistema System a 64 bit è $ 60. Reference Cosa sto sbagliando? Anche quali altri problemi dovrei osservare e cosa dovrei usare per un riferimento? Nel caso avessi bisogno di sapere, sono al Capitolo 5 in Programmazione da zero.
Probabilmente finirò per farlo. Grazie per la vostra risposta. –
Si dovrebbe usare '% rdi' per il primo argomento di chiamata di sistema, non'% rbx'. –
Grazie per averlo capito - risolto. – duskwuff