x86_64 Сборка системного вызова Linux путаница

В настоящее время я изучаю язык ассемблера в Linux. Я использовал книгу «Программирование с нуля», и все примеры 32-битные. Моя ОС 64-битная, и я пытался сделать все примеры в 64-битной версии. Однако у меня возникла проблема:

.section .data

.section .text
.global _start
_start:
movq $60, %rax
movq $2, %rbx
int $0x80

Это просто вызывает системный вызов выхода Linux, или должен. Вместо этого он вызывает SEG FAULT, и когда я вместо этого делаю это

.section .data

.section .text
.global _start
_start:
movq $1, %rax
movq $2, %rbx
int $0x80

, он работает. Очевидно, проблема в том, что я перехожу к% rax. Значение 1 доллар, которое я использую во втором примере, - это то, что «Программирование с нуля» говорит об использовании, однако несколько источников в Интернете сообщают, что 64-разрядный системный номер вызова составляет 60 долларов. Ссылка Что я делаю неправильно? Также на какие еще проблемы мне следует обратить внимание и что использовать для справки? На всякий случай, если вам нужно знать, я нахожусь в главе 5 книги «Программирование с нуля».

16
задан zed_0xff 14 December 2011 в 19:26
поделиться