我目前正在編寫一個簡單的C編譯器,它將.c文件作爲輸入並生成彙編代碼(X86,AT & T語法)。 Everyting是好的,但是當我嘗試執行IDIVQ指令時,我得到一個浮點異常。這裏是我輸入:X86程序集 - 處理IDIV指令
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應該產生%RAX 6/d(商)。但是我得到一個浮點異常,我似乎無法找到問題。
任何幫助將不勝感激!
與這個問題無關,但是你應該在沒有調整esp寄存器的情況下執行'movq%rdi,-40(%rbp)'嗎?或者是因爲x64'紅色區域'而行嗎? – 2012-04-27 00:51:36