2

我有这个代码:

__asm jno no_oflow
overflow = 1;
__asm no_oflow:

它会产生这个很好的警告:

错误 C4235:使用了非标准扩展:此架构不支持“__asm”关键字

什么是此代码的等效/可接受的替代方法来检查它之前发生的减法运算的溢出?

4

4 回答 4

2

首先定义以下内容:

#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;
}
于 2009-12-10T10:08:04.880 回答
1

我假设上面的代码试图捕捉某种整数上溢/下溢?也许这个问题的答案会有所帮助:如何检测整数溢出?

于 2009-12-10T09:39:41.720 回答
0

这是所有平台上可用的内在函数列表。那里好像没有什么合适的。我想最便携的方法是在减法之前检查它是否会导致溢出。

于 2009-12-10T09:37:11.393 回答
0

我不确定为什么微软不允许 64 位的内联汇编。但是您仍然可以在单独的 .asm 文件中编写程序集,并将您的程序链接到它。

于 2009-12-10T12:54:39.187 回答