2012-02-19 2 views
2

Я недавно начал читать Programing From The Ground Up (PDF), но в первой программе я столкнулся с проблемой. Программа очень проста:

.section .data 
.section .text 

.globl _start 

_start: 
    movl $1, %eax 
    movl $0, %ebx 
    int  $0x80 

Но в компиляции и запуска я получаю ошибку Illegal Instruction: 4. Я отредактировал программу так, чтобы она правильно скомпилировалась (удалил два .section s и изменил _start на _main), чтобы это могло повлиять на нее.

Я использую набор инструкций x86_64 (процессор Intel).

+0

Этот код отлично подходит для меня (в Linux). На какой ОС вы работаете? Хотя, почему вы называете «fork» (2) syscall? Может быть, вам нужен «exit» syscall (1)? – kharvd

+0

А, это была опечатка. Im на Mac OS 10.7. Изменение его на 1 не помогло. Как вы компилируете? Я только что использовал 'gcc'. – Jumhyn

+0

, как start.s -o начинают – kharvd

ответ

2

Если вы используете x86-64, вам нужно немного изменить ABI, см. this. Для очень хорошего резюме различий см. Сообщение this.

+0

Удивительно, спасибо! – Jumhyn

Смежные вопросы