Russian Qt Forum
Сентябрь 30, 2024, 20:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: inline assembler  (Прочитано 4170 раз)
lem
Гость
« : Август 13, 2011, 16:11 »

здравствуйте, уважаемые программисты Улыбающийся
я начинаю разбираться с inline assembler в qt и на первой же тестовой программе столкнулся с проблемой:

код:

Цитировать
void MainWindow::on_pushButton_clicked()
{
    int x;
    asm("mov %[var],5" : [var]"=r"(x));
    QMessageBox box;
    box.setText(QString::number(x));
    box.exec();
}

по идее после нажатия кнопки должен появиться messagebox с текстом "5" , но вместо этого происходит неожиданное завершение программы с кодом "0". объясните пожалуйста в чем причина происходящего. Улыбающийся
Записан
merke
Гость
« Ответ #1 : Август 13, 2011, 19:40 »

Код
ASM
asm("mov %1,%0" : "=r"(x) : "r"(10));
« Последнее редактирование: Август 13, 2011, 19:55 от Александр » Записан
lem
Гость
« Ответ #2 : Август 13, 2011, 20:46 »

спасибо, сработало. но код:
int x;
    asm("mov %1,5" : "=r"(x));
    QMessageBox box;
    box.setText(QString::number(x));
    box.exec();

не сработал. объясни плз в чем причина
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Август 13, 2011, 22:21 »

не сработал. объясни плз в чем причина
Причина в том, что синтаксис ассемблера тут ожидается AT&T'шный, а не видимо привычный вам Intel'овский.
Код
C++ (Qt)
asm("mov $10,%0" : "=r"(x) );
Т.е.:
1) порядок операторов обратный к тому, который вы ожидаете.
2) Числа предваряются знаком доллара.
Записан
merke
Гость
« Ответ #4 : Август 14, 2011, 06:50 »

http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
Записан
lem
Гость
« Ответ #5 : Август 14, 2011, 10:46 »

спасибо большое. если Вам не сложно, дайте пожалуйста ссылку на литературу по поводу использование api в ассемблере (все что я нашел это ttp://asm.sourceforge.net/syscall.html).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.104 секунд. Запросов: 23.