LINUX.ORG.RU

Подскажите что это за синтаксис ассемблера?


0

2

пытаюсь откомпилить cacaovm под i386-qnx

там есть 1 несчастный ассемблерный файл, в нем используется такой синтаксис.

16ти разрядные регистры иногда пишутся без знака процент: mov sp,bp

а иногда со знаком процента: and $0xfcff,%ax при этом тут еще видно, что шестнадцатиричные числа предваряются префиксом 0x, при в конце числа h не ставится

32-разрядные регистры пишутся со знаком процента: push %ebx

Пишется сначала откуда, потом куда, числа пишутся со знаком доллара: sub $12, %esp

в файле используются обычные C-style инклуды сишных хедеров: #include «file.h»

Все это в одном файле, одновременно. Я погуглил - похоже это какая-то помесь интел и ат&т синтаксиса. gcc это не понимает. Ни gcc для целевой архитектуры, ни родной amd64 что-нинаесть-убунтовский. Ругаются одинаково, при этом от сишных инклудов им вообще плохеет.

Например, на mov sp, bp они ругаются «Error: too many memory references for `mov'»

когда я собираю под линукс «родным» autotools, то gcc совершенно непонятным образом компилит его, но я пробовал запускать ту же самую команду из консоли - не прокатывает. Это наводит на мысль, что libtool ставит каким-то образом окружение, что gcc начинает понимать эту связку. Как узнать что ему надо?

Вместо gcc сунь временно env, если рут есть.

anonymous
()

Ругаются одинаково, при этом от сишных инклудов им вообще плохеет.

Суффикс .S или опция -x assembler-with-cpp

16ти разрядные регистры иногда пишутся без знака процент: mov sp,bp

Может там где-то #define sp <blabla> есть?

Deleted
()

хотя-бы кусок текста дай. Не интересно разбираться в объяснении того, чего не понимает автор объяснения.

drBatty ★★
()

обычный GAS-синтаксис?

dikiy ★★☆☆☆
()
Ответ на: комментарий от drBatty

Спасибо, разобрался уже.

Подозреваю, что бага все же была в дефайнах, оно из за них лезло не в те места системных либ, и там уже творило мне дефайновый беспредел %)

Точно причину так и не установил - сделал несколько других модификаций и оно само заработало. А раз заработало - я решил «не трогать».

а синтаксис это at&t, походу.

chabapok
() автор топика
Ответ на: комментарий от m0rph

да ладно, после нескольких лет с ним я на intel syntax смотреть не могу. Глазу не за что зацепиться.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.