条件eax!= 0和edx == 0?

Feb*_*oho 2 linux x86 assembly conditional nasm

我有一个像这样的示例代码:

global _start
section .text

_start:

div eax
int 0x80
Run Code Online (Sandbox Code Playgroud)

在编译并运行它之后,输出为:

Floating point exception (core dumped)
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 这是否有条件eax != 0 and eax == 0
  2. 目的是Floating point exception (core dumped)什么?

a3f*_*a3f 5

该名称有点误导,因为您的代码片段中没有浮点运算.

在C中,除以零是未定义的行为,这意味着您无法轻易地假设特定行为(或者更准确地说,您必须预期会发生任何事情).

在x86上,任何东西都是硬件异常.操作系统的主要职责之一是处理这些硬件异常.Linux通过SIGFPE向违规进程发送信号来处理除零.

在除以零之后,大多数进程无法继续运行(因为程序应该继续使用什么值?)并因此转储核心并使用返回值表示中止使其中止的信号.

然后你的shell解释你的pogram的返回值并Floating point exception (core dumped)在你的终端上写下来.

尽管如此,它并不总是那样.像Java这样的虚拟机有一个div除零的处理程序,它会抛出一个特定于java的ArithmeticException程序,你可以在不中止程序的情况下处理它.

在你的代码中,除以零是因为你的未初始化中eax有一个零.