Встроенная сборка в Netbeans с использованием C ++ - PullRequest
1 голос
/ 30 марта 2012

Я пытаюсь выучить ассемблер из серии очень хороших уроков, размещенных на youtube:

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

Я знаком с программированием на 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.

Ответы [ 2 ]

5 голосов
/ 30 марта 2012

Вы получаете ошибку компиляции, потому что вы используете неправильный синтаксис.

Попробуйте изменить метод getValueFromASM на этот:

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

Хорошее руководство по встроенной сборке с GCC можно найти здесь: http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

1 голос
/ 02 апреля 2012

Специально читайте о расширенных ассемблерных и закрытых регистрах http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s5

Кроме того, синтаксис Intel - это func dest, src, но синтаксис ATT (чего требует gcc) имеет func src, dest

...