c - 通过 x86 汇编进行零除检查的 C 除法宏

标签 c x86 inline-assembly

我想创建除零宏,如下所示:

DIVIDE(zero_exception_boolean, 分子, 分母)

由于我不完全是汇编人员,所以任何人都可以帮助我在使用 x86 程序集(gcc、linux)的简单宏中实现此目的。

据我记得,确实有“除以零”的标志寄存器应该支持这一点(我可能是错的)。

最佳答案

没有理由不能将其作为 C 函数来执行。

div_result_t DIVIDE (int* result, int numerator, int denominator)
{
  if(denominator == 0)
  {
    return div_by_zero;
  }

  *result = numerator / denominator;

  return div_ok;
}


int main()
{
  div_result_t result;
  int value;

  result = DIVIDE (&value, 5, 0);
  if(result == div_by_zero)
  {
    halt_and_catch_fire();
  }
}

关于c - 通过 x86 汇编进行零除检查的 C 除法宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23679952/

相关文章:

c - GCC/x86 内联汇编 : How do you tell gcc that inline assembly section will modify %esp?

c++ - 汇编语言扫描长字符串以计算元音的数量

c - 如何在c中创建没有数据库的多变量数组

CreateWindow失败,错误50(不支持该请求。)

c++ - 函数调用成本

assembly - EMU8086 将 32 位数字除以 16 位数字给出意外的 0 余数

assembly - 当我使用 "error: parser: instruction expected"指令时为 "org 0x0100"

c - 当您使用稍后分配给全局的临时值时,GCC 不会将内联汇编 "=g"输出优化为内存操作数?

c - 在 glib 中打印 utf8

c - 从文件中读取固定长度的整数行(bu