X86-Assembly - Umgang mit der IDIV-Anweisung
Ich schreibe gerade einen einfachen C-Compiler, der eine .c-Datei als Eingabe verwendet und Assembly-Code generiert (X86, AT & T-Syntax). Alles ist gut, aber wenn ich versuche, einen IDIVQ-Befehl auszuführen, erhalte ich eine Gleitkomma-Ausnahme. Hier ist meine Eingabe:
<code>int mymain(int x){ int d; int e; d = 3; e = 6 / d; return e; } </code>
Und hier ist mein generierter Code:
<code>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 </code>
Gemäßhttp://www.cs.virginia.edu/~evans/cs216/guides/x86.html, idivq% rbx sollte 6 / d (der Quotient) in ergeben% rax. Aber ich bekomme eine Gleitkomma-Ausnahme und kann das Problem anscheinend nicht finden.
Jede Hilfe wird sehr geschätzt!