相关疑难解决方法(0)

我可以在GCC中使用x86汇编的Intel语法吗?

我想写一个小的低级程序.对于它的某些部分,我将需要使用汇编语言,但其余代码将使用C/C++编写.

那么,如果我使用GCC将C/C++与汇编代码混合在一起,我是否需要使用AT&T语法,还是可以使用Intel语法?或者你如何以其他方式混合使用C/C++和asm(intel语法)?

我意识到也许我没有选择,必须使用AT&T语法,但我想确定..

如果结果没有选择,我可以在哪里找到有关AT&T语法的完整/官方文档?

谢谢!

c x86 assembly gcc inline-assembly

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

整数除以零的平台会触发浮点异常?

在另一个问题中,有人想知道为什么他们得到一个"浮点错误",实际上他们的C++程序中有一个整数除零.围绕这一点进行了讨论,其中一些断言浮点异常实际上从未因浮点除以零而增加,而只是在整数除以零时出现.

这听起来很奇怪,因为我知道:

  1. 所有Windows平台上x86和x64上的MSVC编译代码报告int除以零为"0xc0000094:整数除以零",浮点除以零为0xC000008E"浮点除以零"(启用时)

  2. IA-32和AMD64 ISA指定#DE(整数除法异常)作为中断0.浮点异常触发中断16(x87浮点)或中断19(SIMD浮点).

  3. 其他硬件具有类似的不同中断(例如, PPC在float-div-by上引发0x7000并且根本不捕获int/0).

  4. 我们的应用程序使用_controlfp_s内部(最终stmxcsr操作)取消屏蔽零除零的浮点异常,然后捕获它们以进行调试.所以我在实践中肯定会看到IEEE754被零除的异常.

因此,我得出结论,有些平台将异常作为浮点异常报告,例如x64 Linux(无论ALU管道如何,都会针对所有算术错误提升SIGFPE).

其他操作系统(如果您操作系统,还是C/C++运行时)报告整数除零作为浮点异常?

c c++ error-handling x86-64 divide-by-zero

11
推荐指数
2
解决办法
2302
查看次数

标签 统计

c ×2

assembly ×1

c++ ×1

divide-by-zero ×1

error-handling ×1

gcc ×1

inline-assembly ×1

x86 ×1

x86-64 ×1