如何在 VS2008 64 位版本中用 intristic 替换 __asm jno no_oflow?

发布于 2024-08-14 08:28:22 字数 224 浏览 11 评论 0原文

我有这段代码:

__asm jno no_oflow
overflow = 1;
__asm no_oflow:

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

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

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

I have this code:

__asm jno no_oflow
overflow = 1;
__asm no_oflow:

It produces this nice warning:

error C4235: nonstandard extension used : '__asm' keyword not supported on this architecture

What would be an equivalent/acceptable replacement for this code to check the overflow of a subtraction operation that happened before it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

青巷忧颜 2024-08-21 08:28:22

首先定义以下内容:

#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;
}

First define the following:

#ifdef _M_IX86
typedef unsigned int READETYPE;
#else
typedef unsigned __int64 READETYPE;
#endif

extern "C"
{
READETYPE __readeflags();
}

#pragma intrinsic(__readeflags)

You can then check the eflags register as follows:

if ( (__readeflags() & 0x800))
{
    overflow = 1;
}
¢蛋碎的人ぎ生 2024-08-21 08:28:22

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

I assume that the code above is trying to catch some sort of integer overflow/underflow? Maybe the answers to this question will help: How to detect integer overflow?

╭⌒浅淡时光〆 2024-08-21 08:28:22

以下是所有平台上可用的内在函数的列表。看起来没有什么合适的。我想最便携的方法是在减法之前检查是否会导致溢出。

Here's a list of intrinsics available on all platforms. Looks there's nothing suitable there. I guess the most portable way would be to check before the subtraction whether it will lead to an overflow.

蓝天 2024-08-21 08:28:22

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

I'm not sure why Microsoft disallowed inline assembly in 64-bit. but you can still write assembly in a separate .asm file, and link your program against it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文