Запуск бинарного файла с помощью qemu

Я изучаю язык ассемблера на одном курсе. У меня небольшие проблемы с началом работы. Я написал простой код на C:

int main()
{
    int a = 10;
    int b = 20;
    int c = a+b;
}

А затем я преобразовал его в ассемблерный код, используя руку gnu, дав команду:

arm-elf-gcc -S first.c

Это сгенерировало файл first.s, содержащий ассемблерный код :

   .file   "first.c"
   .text
   .align  2
   .global main
   .type   main, %function
main:
    @ args = 0, pretend = 0, frame = 12
    @ frame_needed = 1, uses_anonymous_args = 0
    mov ip, sp
    stmfd   sp!, {fp, ip, lr, pc}
    sub fp, ip, #4
    sub sp, sp, #12
    mov r3, #10
    str r3, [fp, #-16]
    mov r3, #20
    str r3, [fp, #-20]
    ldr r2, [fp, #-16]
    ldr r3, [fp, #-20]
    add r3, r2, r3
    str r3, [fp, #-24]
    mov r0, r3
    sub sp, fp, #12
    ldmfd   sp, {fp, sp, pc}
   .size   main,.-main
   .ident  "GCC: (GNU) 3.4.3"

. Затем я скомпилировал код сборки, используя следующую команду:

arm-elf-gcc -g first.s

Это сгенерировало двоичный файл.out. Затем я попытался запустить a.out с помощью qemu с помощью команды:

qemu-arm a.out

Но это генерирует вывод

Segmentation fault

Не могу найти ошибку, что я делаю не так?

5
задан UNK 9 August 2012 в 11:34
поделиться