Сборка X86 -Обработка инструкции IDIV

В настоящее время я пишу простой компилятор C, который принимает файл.c в качестве входных данных и генерирует ассемблерный код (X86, AT&T синтаксис ). Все хорошо, но когда я пытаюсь выполнить инструкцию IDIVQ, я получаю исключение с плавающей запятой -. Вот мой ввод:

int mymain(int x){
  int d;
  int e;
  d = 3;
  e = 6 / d;
  return e;
}

И вот мой сгенерированный код:

mymain:
.LFB1:
   .cfi_startproc
    pushq   %rbp
   .cfi_def_cfa_offset 16
    movq    %rsp, %rbp
   .cfi_offset 6, -16
   .cfi_def_cfa_register 6
    movq    %rdi, -40(%rbp)
    movq    $3, -8(%rbp)
    movq    $6, %rax
    movq    -8(%rbp), %rdx
    movq    %rdx, %rbx
    idivq   %rbx
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rax
    leave
   .cfi_def_cfa 7, 8
    ret
   .cfi_endproc
.LFE1:
   .size mymain,.-mymain

Согласноhttp://www.cs.virginia.edu/~evans/cs216/guides/x86.html, idivq %rbx должен давать 6/d (частное )в %rax . Но я получаю исключение с плавающей запятой -и не могу найти проблему.

Будем признательны за любую помощь!

23
задан elyas-bhy 27 April 2012 в 00:20
поделиться