2012-03-29 382 views
1

我試圖從一系列上傳到YouTube上很好的教程學習彙編:內彙編使用NetBeans C++

http://www.youtube.com/watch?v=guru397zg2g&list=PL0C5C980A28FEE68D&feature=plcp&context=C4ca8d4cFDvjVQa1PpcFM2reYRFji1sQFkiYY545AxtksGRUnLWSY=

我familar與C++和Java編程NetBeans和我使用MinGW編譯器集。 我有我的C++和裝配編譯器在NetBeans編譯器屬性中設置。

我的C++代碼正在編譯,但是使用_asm {}來嘗試內聯彙編代碼沒有正確編譯。

我收到的錯誤是:

main.cpp: In function 'int getValueFromASM()': 

main.cpp:18:5: error: '_asm' was not declared in this scope 

main.cpp:18:10: error: expected ';' before '{' token 

make[2]: *** [build/Debug/MinGW_1-Windows/main.o] Error 1 

make[1]: *** [.build-conf] Error 2 

make: *** [.build-impl] Error 2 

的代碼是:

#include <cstdlib> 
#include <iostream> 

using namespace std; 



int getValueFromASM() 
{ 
    _asm { 
     mov eax, 39 
    } 
} 

int main(int argc, char** argv) { 

    cout << "Hello World from C++ !\n"; 

    cout << "ASM said " << getValueFromASM() << endl; 

    cout << "Back in the program before close.\n"; 

    return 0; 

} 

有人能指出我如何讓​​內聯彙編在NetBeans工作的方向。

+0

如果您使用Windows,您可能會更好地嘗試下載免費版本的MS工具。我不知道MS在線彙編程序的現代語法(自從我用MS工具完成這些工作20多年以來),但GNU聯機彙編程序可能會變得越來越不同。 – gbulmer 2012-03-29 22:30:45

回答

4

由於您使用的語法錯誤,您將收到編譯錯誤。

試着改變你的getValueFromASM方法是:

int getValueFromASM() 
{ 
    asm("mov $39, %eax"); 
} 

很好的指導與GCC內聯彙編可以在這裏找到:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

+0

謝謝,非常有用的指導..厭倦AT&T版本的程序集幾乎與英特爾程序集完全相反,但猜測它是如何的。 – Zac 2012-03-30 11:50:25