用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

参考技术A #include <stdio.h>
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;

【讨论】:

谢谢 - 这解决了它并保持功能基本相同! - 我认为只包含 并使用 readeflags 就足够了 - 我会将 0x800 更改为 ( 1 很好的链接供将来参考:msdn.microsoft.com/en-us/library/aa983406%28VS.80%29.aspx, en.wikipedia.org/wiki/FLAGS_register_%28computing%29【参考方案2】:

我假设上面的代码试图捕捉某种整数上溢/下溢?也许这个问题的答案会有所帮助:How to detect integer overflow?

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于用vs2010,编译C++程序时,插入“__asm”代码显示3个错误,求高手解决!的主要内容,如果未能解决你的问题,请参考以下文章

用vs2015写c++,编译报错项目已过期,怎么回事?

如何在VS2010中运行编译C和C++?

VS2010 c++编译的时候总是出现找不到exe文件、这是个啥情况

用VS2010编译的C++大作业出现了无法识别的外部符号BUG

vs2015写c++不是内部或外部命令,也不是可运行的程序或批处理文件

如何在VS2010中运行编译C和C++?