2012-07-20 75 views
0

內嵌asm代碼的文件格式爲xyz.c我正在使用Visual C++ 2010 Express IDE。標題中提到了錯誤。任何幫助表示讚賞!謝謝!如何解決錯誤C2059:語法錯誤:Visual C++ 2010 Express中的'__asm'

我的代碼大致看起來像這樣。

#include "xyz.h" 

/* 
; Multi-line comments 
; 
*/ 

__asm{ 
    Assembly code 
} 
/* 
; Multi-line comments 
; 
*/ 
. 
. 
. 

__asm{ 
    Assembly code 
} 
/* 
; Multi-line comments 
; 
*/ 

__asm{ 
    Assembly code 
} 
+1

您是否正在編譯x64? – Mysticial 2012-07-20 03:31:26

+0

我收回它。 VS Express沒有64位編譯器。 – Mysticial 2012-07-20 03:36:55

+0

編譯器的VS Express系列是有限的,也許它只是不支持'__asm'擴展? – 2012-07-20 06:07:40

回答

2

您不能將asm代碼(或任何其他代碼)直接放到全局範圍中。你必須把它放在一個函數中。

void f() 
{ 
    __asm { 
     Some code 
    } 
} 
+0

我不清楚函數「f」會被調用到什麼地方。你可以更詳細地解釋一下(可能有一些示例骨架代碼,我該怎麼做?)? 謝謝! :) – Shambavi 2012-07-23 07:01:03

+0

在C中,所有的代碼都必須在函數內部。不管它是常規的C代碼還是asm代碼都沒關係。函數f()可以像調用其他函數一樣調用。 – 2012-07-23 09:37:03

+0

謝謝Mr.Persson! :) – Shambavi 2012-07-23 09:53:02

0

這個例子對我的作品:

#include <windows.h> 
#include <iostream> 

using namespace std; 

int Add(int x, int y){ 
    asm(
      "addl %1, %0" 
      : "=r"(x) 
      : "m"(y), "0"(x) 
    ); 
return x; 
} 


int main() 
{ 
    int x,y; 

    cout<<"Enter first number\n"; 
    cin>>x; //enter first number 
    cout<<"Enter second number\n"; 
    cin>>y; //enter second number 

    cout<<Add(x,y)<<endl; 

return 0; 

}

你可以看到不同的語法。但是asm {}或__asm __ {}或者任何{}不能用於minGW,只能用於visual studio。

相關問題