Сейчас на форуме: zombi-vadim, zds (+4 невидимых)

 eXeL@B —› Программирование —› AT&T-нотация ассемблера в gcc
Посл.ответ Сообщение


Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 26 августа 2013 16:43
· Личное сообщение · #1

Довольно нубский вопрос.

Никогда не кодил под Linux, но тут пришлось.

Столкнулся с проблемой - gcc требует, чтобы ассемблерные вставки были в формате at&t, а он очень сильно отличается от интеловского. Кроме того, параметры там нужно передавать через список, который находится непосредственно после строки, где содержатся инструкции. Может быть, где-то есть вменяемое описание этого формата на русском языке? Или, может быть, можно сделать так, чтобы gcc воспринимал intel-нотацию ассемблера (в том числе - и подстановку параметров без всего этого рака с их списком)?

Заранее спасибо.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 26 августа 2013 17:02
· Личное сообщение · #2

Crawler пишет:
Или, может быть, можно сделать так, чтобы gcc воспринимал intel-нотацию ассемблера (в том числе - и подстановку параметров без всего этого рака с их списком)?


-masm=intel

-----
http://ntinfo.biz





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 26 августа 2013 17:08 · Поправил: Crawler
· Личное сообщение · #3

hors, но все-таки masm=intel не дает возможности избавиться от списка входных и выходных переменных, или я ошибаюсь?

Есть ли способ сделать инлайн как в visual studio, к примеру?

* я имел в виду вот что: неплохо бы вместо

__asm("mov eax, %0\n"::"r"(some_var));

писать просто

__asm("mov eax, some_var\n").

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 26 августа 2013 17:38
· Личное сообщение · #4

Crawler пишет:
* я имел в виду вот что: неплохо бы вместо

__asm("mov eax, %0\n"::"r"(some_var));

писать просто

__asm("mov eax, some_var\n").


Можно, но нужно явно указывать размер. __asm("mov eax, dword ptr [some_var]\n")

-----
http://ntinfo.biz


| Сообщение посчитали полезным: Crawler
 eXeL@B —› Программирование —› AT&T-нотация ассемблера в gcc
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати