我目前正在编写一个简单的 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应该在%rax中产生 6/d (商)。但是我遇到了一个浮点异常,我似乎找不到问题所在。
任何帮助都感激不尽!