首页 > 解决方案 > 使用特定寄存器时获取浮点异常

问题描述

执行时我有以下代码我看到浮点异常

.section .data
var1:
        .int 20
.section .text
.globl _start
_start:
        movl $var1, %edx
        movl (%edx), %eax
        movl $5, %ecx
        div %ecx
        movl %eax, %ebx
        movl $1, %eax
        int $0x80

当我执行上面的代码时,我得到浮点异常

../../bin/a49
Floating point exception (core dumped)

但是在上面的代码中,如果我将存储 var1 地址的寄存器从 edx 更改为 ecx,它会按预期工作

.section .data
var1:
        .int 20
.section .text
.globl _start
_start:
        movl $var1, %ecx
        movl (%ecx), %eax
        movl $5, %ecx
        div %ecx
        movl %eax, %ebx
        movl $1, %eax
        int $0x80

当我执行上述代码时,我看不到 FPE。

$ ../../bin/a49
$ echo $?
4

我无法理解上述行为。

标签: assemblyx86att

解决方案


推荐阅读