Встроенная сборка в Netbeans с использованием C++

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

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

Я знаком с программированием на C++ и Java в netbeans и использую набор компиляторов MinGW. У меня есть компиляторы С++ и ассемблера, установленные в свойствах компилятора 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.


person Zac    schedule 29.03.2012    source источник
comment
Если вы используете Windows, возможно, вам лучше попробовать загрузить бесплатную версию инструментов MS. Я не знаю современного синтаксиса для встроенного ассемблера MS (более 20 лет с тех пор, как я делал подобные вещи с инструментами MS), но встроенный ассемблер GNU, вероятно, будет все больше отличаться.   -  person gbulmer    schedule 30.03.2012


Ответы (2)


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

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

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

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

person Kyle Lutz    schedule 29.03.2012
comment
Спасибо, очень полезный гайд. Раздражает, что версия сборки AT&T почти полная противоположность сборки Intel, но угадайте, что это именно так. - person Zac; 30.03.2012

В частности, прочитайте о расширенном asm и затертых регистрах http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s5

Кроме того, синтаксис Intel — это func dest,src, а синтаксис ATT (который требуется для gcc) имеет func src,dest.

person tree    schedule 01.04.2012