Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2010, 18:48   #1
gvf
Новичок
Джуниор
 
Аватар для gvf
 
Регистрация: 13.06.2010
Сообщений: 2
По умолчанию gcc inline assembler - обнуление переменной

Приветствую, уважаемые программисты. Не могу сказать, что я гуру в ассемблере и в C, поэтому пишу в этот раздел.
Есть обычная учебная задача, и есть программа на C++ с вложенным ассемблерным кодом:
Код:
#include <iostream>
using namespace std;
int main () {
int avar,bvar,cvar,dvar,evar,xvar,result = 0; 
cout << "Enter A, B, X values: " << endl;
cin >> avar >> bvar >> xvar;
asm("movl %1, %%eax;\n" // move first arg - xvar - to %%eax for multiplying
"mul %%eax;\n" // %%eax = %%eax * %%eax
"mul %%eax;\n" 
"mov %3, %%ebx;\n" // %%ebx = avar
"mul %%ebx;\n" // %%eax = %%eax * %%ebx
"push %%eax;\n" // stack[0] = %%eax = avar * xvar^4
"mov %1, %%eax;\n" // %%eax = xvar
/*"mov %1, %%ebx;\n" // %%ebx = xvar
"mul%%ebx;\n" // it could be done using a counted loop, but here is not so many variables
"mul %%ebx;\n"
"mov %4, %%ebx;\n" // %%ebx = bvar
"mul %%ebx;\n" // %%eax = bvar * xvar^3
"push %%eax;\n" // stack[1] = %%eax = bvar * xvar^3
"pop %%ebx;\n"
"add %%eax, %%ebx;\n"*/
"mov %%eax, %0;\n"
: "=m" (result) // %0 
: "m" (xvar) /* %1 */, "m" (cvar) /* %2 */, "m"(avar) /* %3 */, "m" (bvar) /* %4 */
:"%eax"
);
cout << result << endl;
return 0;
}
Это ещё не дописанный код, а застрял я на вот таком моменте: программа возвращает нулевой результат в переменную result. Экспериментальным путём выяснено, что это происходит на моменте
Код:
"push %%eax;\n" // stack[0] = %%eax = avar * xvar^4
"mov %1, %%eax;\n" // %%eax = xvar
Если извлечь значение из стека после занесения - то код отрабатывает нормально.
В связи с этим возникает вопрос: что я делаю не так?
Заранее благодарен за помощь
God, save him Satan!
gvf вне форума Ответить с цитированием
Старый 13.06.2010, 19:33   #2
gvf
Новичок
Джуниор
 
Аватар для gvf
 
Регистрация: 13.06.2010
Сообщений: 2
По умолчанию

Выяснил, что следующие за командой push инструкции просто игнорируются компилятором до команды pop. О_о
God, save him Satan!
gvf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как GCC Assembler привести к intelовскому синтаксису Роман Радер Общие вопросы C/C++ 5 07.11.2009 23:11
inline функции pproger Общие вопросы C/C++ 7 19.10.2009 23:46
Обнуление переменной [MI_nor] Общие вопросы C/C++ 3 05.11.2008 18:01
inline asm в gcc drRobert Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.08.2008 10:26
inline??? пыхта4ог Общие вопросы C/C++ 2 09.11.2007 17:54