相关疑难解决方法(0)

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万
查看次数

64位鼻子师idiv

;print out division message
mov rcx, 0                       ;zero out register
mov rax, [input]
mov rcx, [input2]
idiv rcx                        ;divide rax by rcx
mov rdi, rax                    ;for printing purposes
call print_int
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚为什么这不是分裂,我得到一个enrror"浮点异常"我使用64位机器,值是整数而不是浮点....想法?

我知道在除法发生之后,商应该是rax,剩下的应该是rdx我相信,但是现在我只是试着把手放在商上.

assembly x86-64 nasm

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

assembly ×2

c ×1

compiler-construction ×1

nasm ×1

x86 ×1

x86-64 ×1