小编ely*_*bhy的帖子

X86程序集 - 处理IDIV指令

我目前正在编写一个简单的C编译器,它将.c文件作为输入并生成汇编代码(X86,AT&T语法).一切都很好,但是当我尝试执行IDIVQ指令时,我得到一个浮点异常.这是我的意见:

int mymain(int x){
  int d;
  int e;
  d = 3;
  e = 6 / d;
  return e;
}
Run Code Online (Sandbox Code Playgroud)

这是我生成的代码:

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
Run Code Online (Sandbox Code Playgroud)

http://www.cs.virginia.edu/~evans/cs216/guides/x86.html,idivq%RBX应该产生在6/d(商)%RAX.但我得到一个浮点异常,我似乎无法找到问题.

任何帮助都感激不尽!

c compiler-construction x86 assembly

23
推荐指数
2
解决办法
2万
查看次数

标签 统计

assembly ×1

c ×1

compiler-construction ×1

x86 ×1