Ошибка компиляции со встроенным ассемблером - PullRequest
2 голосов
/ 16 июля 2010

Я не понимаю, почему этот код

#include <iostream>
using namespace std;
int main(){
    int result=0;

    _asm{
        mov eax,3;
        MUL eax,3;
        mov result,eax;
    }

    cout<<result<<endl;
    return 0;
}

показывает следующую ошибку.

1> c: \ users \ david \ documents \ visual studio 2010 \ projects\ assemblyr_instructions \ assemblyr_instructions.cpp (11): ошибка C2414: недопустимое количество операндов

Все выглядит хорошо, и все же, почему я получаю эту ошибку компилятора?

Ответы [ 4 ]

11 голосов
/ 16 июля 2010

Согласно этой странице , инструкция mul принимает только один аргумент:

Мул Арг

Это умножает «arg» на значение соответствующей длины байта в регистре A, см. Таблицу ниже:

размер операнда 1 байт 2 байта 4 байта

другой операнд AL AX EAX

старшая часть результата хранится в: AH DX EDX

нижняя часть результата хранится в: AL AX EAX

4 голосов
/ 19 июля 2010

Таким образом, следуя примечаниям по ссылке Джастина:

#include <iostream>

int main()
{
    int result=0;

    _asm{
        mov eax, 3;
        mov ebx, 4;
        mul ebx;
        mov result,eax;
    }

    std::cout << result << std::endl;

    return 0;
}
2 голосов
/ 20 июля 2010

Использование:

imul eax, 3;

или:

imul eax, eax, 3;

Таким образом, вам не нужно беспокоиться о засорении edx-регистра.Это «целочисленное умножение со знаком».Похоже, у вас результат int, поэтому не имеет значения, используете ли вы mul или imul.

Иногда я получаю ошибки из-за того, что регистр edx обнуляется при делении или умножении.Процессор был Intel Core2 Quad Q9550

Есть ошеломительно, но правильные справочные инструкции Intel вы можете прочитать.Хотя Intel сломала свои сайты некоторое время назад.Вы можете попробовать найти те же справочные руководства на сайтах AMD.

Обновление: я нашел руководство: http://www.intel.com/design/pentiumii/manuals/243191.htm

Я не знаю, когда они собираются снова взломать свои сайты, поэтомуВы действительно всегда должны искать это.

Обновление 2: АРГХЛ!это с 1999 года .. ну, к сожалению, большинство деталей совпадают.

1 голос
/ 20 июля 2010

Вам следует скачать руководства по архитектуре Intel.

http://www.intel.com/products/processor/manuals/

Для вас том 2 поможет вам больше всего.

По состоянию на июль 2010 г. они действительны.

...