我有这个代码:
__asm jno no_oflow
overflow = 1;
__asm no_oflow:
它会产生这个很好的警告:
错误 C4235:使用了非标准扩展:此架构不支持“__asm”关键字
什么是此代码的等效/可接受的替代方法来检查它之前发生的减法运算的溢出?
我有这个代码:
__asm jno no_oflow
overflow = 1;
__asm no_oflow:
它会产生这个很好的警告:
错误 C4235:使用了非标准扩展:此架构不支持“__asm”关键字
什么是此代码的等效/可接受的替代方法来检查它之前发生的减法运算的溢出?
首先定义以下内容:
#ifdef _M_IX86
typedef unsigned int READETYPE;
#else
typedef unsigned __int64 READETYPE;
#endif
extern "C"
{
READETYPE __readeflags();
}
#pragma intrinsic(__readeflags)
然后,您可以按如下方式检查 eflags 寄存器:
if ( (__readeflags() & 0x800))
{
overflow = 1;
}
我假设上面的代码试图捕捉某种整数上溢/下溢?也许这个问题的答案会有所帮助:如何检测整数溢出?
这是所有平台上可用的内在函数列表。那里好像没有什么合适的。我想最便携的方法是在减法之前检查它是否会导致溢出。
我不确定为什么微软不允许 64 位的内联汇编。但是您仍然可以在单独的 .asm 文件中编写程序集,并将您的程序链接到它。