Название: inline assembler Отправлено: 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". объясните пожалуйста в чем причина происходящего. :) Название: Re: inline assembler Отправлено: merke от Август 13, 2011, 19:40 Код
Название: Re: inline assembler Отправлено: lem от Август 13, 2011, 20:46 спасибо, сработало. но код:
int x; asm("mov %1,5" : "=r"(x)); QMessageBox box; box.setText(QString::number(x)); box.exec(); не сработал. объясни плз в чем причина Название: Re: inline assembler Отправлено: LisandreL от Август 13, 2011, 22:21 не сработал. объясни плз в чем причина Причина в том, что синтаксис ассемблера тут ожидается AT&T'шный, а не видимо привычный вам Intel'овский.Код Т.е.: 1) порядок операторов обратный к тому, который вы ожидаете. 2) Числа предваряются знаком доллара. Название: Re: inline assembler Отправлено: merke от Август 14, 2011, 06:50 http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
Название: Re: inline assembler Отправлено: lem от Август 14, 2011, 10:46 спасибо большое. если Вам не сложно, дайте пожалуйста ссылку на литературу по поводу использование api в ассемблере (все что я нашел это ttp://asm.sourceforge.net/syscall.html).
|