如何在 VS2008 64 位版本中用 intristic 替换 __asm jno no_oflow?
我有这段代码:
__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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
首先定义以下内容:
然后您可以按如下方式检查 eflags 寄存器:
First define the following:
You can then check the eflags register as follows:
我假设上面的代码试图捕获某种整数上溢/下溢?也许这个问题的答案会有所帮助:如何检测整数溢出?< /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?
以下是所有平台上可用的内在函数的列表。看起来没有什么合适的。我想最便携的方法是在减法之前检查是否会导致溢出。
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.
我不确定为什么 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.