用vs2010,编译C++程序时,插入“__asm”代码显示3个错误,求高手解决!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用vs2010,编译C++程序时,插入“__asm”代码显示3个错误,求高手解决!相关的知识,希望对你有一定的参考价值。
error C2059: 语法错误:“__asm”
error C2143: 语法错误 : 缺少“;”(在“”的前面)
error C2447: “”: 缺少函数标题(是否是老式的形式表?)
我插入的代码如下:
__asm
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
int main()
__asm
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
return 0;
本回答被提问者采纳
如何在 VS2008 64 位版本中将 __asm jno no_oflow 替换为内部结构?
【中文标题】如何在 VS2008 64 位版本中将 __asm jno no_oflow 替换为内部结构?【英文标题】:How do I replace __asm jno no_oflow with an intristic in a VS2008 64bit build? 【发布时间】:2009-12-10 09:25:34 【问题描述】:我有这个代码:
__asm jno no_oflow
overflow = 1;
__asm no_oflow:
它会产生这个很好的警告:
错误 C4235:使用了非标准扩展:此架构不支持“__asm”关键字
什么是等效/可接受的替代代码来检查之前发生的减法运算的溢出?
【问题讨论】:
一段时间后,无论哪种方式,我们都在这个区域被咬了 - 事实证明,无论哪种方式检查溢出都不太好 - 我找到的最好的描述和解决方案在这里:securecoding.cert.org/confluence/display/seccode/… 【参考方案1】:首先定义以下内容:
#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;
【讨论】:
谢谢 - 这解决了它并保持功能基本相同! - 我认为只包含我假设上面的代码试图捕捉某种整数上溢/下溢?也许这个问题的答案会有所帮助:How to detect integer overflow?
【讨论】:
【参考方案3】:Here's a list 所有平台上可用的内在函数。那里好像没有什么合适的。我想最便携的方法是在减法之前检查它是否会导致溢出。
【讨论】:
【参考方案4】:我不确定为什么 Microsoft 不允许在 64 位中进行内联汇编。但是您仍然可以在单独的 .asm 文件中编写程序集,并将您的程序链接到它。
【讨论】:
以上是关于用vs2010,编译C++程序时,插入“__asm”代码显示3个错误,求高手解决!的主要内容,如果未能解决你的问题,请参考以下文章
VS2010 c++编译的时候总是出现找不到exe文件、这是个啥情况
用VS2010编译的C++大作业出现了无法识别的外部符号BUG