Показать сообщение отдельно
Старый 01.04.2014, 20:32   #9
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: Синтаксис: at&t vs intel

В gcc/g++ можно использовать оба синтаксиса, переключая ключом -masm=intel|att.
Оба синтаксиса в gcc сохраняют контроль над отношением регистров и локальных переменных (входящие/выходящие параметры), в msvs насколько я знаю такого нет.
Меняется сразу и инлайн и выходной асм код (который по ключу -S можно вывести).

Более того мы можем указать компилятору не оптимизировать вставку:
asm volatile ( ... );
asm volatile ( ... );
Тогда они будут выполняться друг за другом, без всяких перестановок.

Точно также можно поступить с переменными обозная их квалификатором volatile, хотя по идее компилятор должен и без него определять как используется переменная, volatile нужен скорей в тех случаях когда переменная может измениться внешнем для приложения образом, например в случае мапирования портов или внешних устройств.

Я предпочитаю intel, и где можно переключаю на него, хотя некоторые программы (дебагеры, отладчики памяти и прочие) дают инфу в att полюбому, так что на практике приходится работать сразу с двумя синтаксисами.

В инлайн вставках лучше использовать управляемые как гцц конструкции где можно указать входящие/выходящие регистры.
Если же создаешь объектный файл целиком в асме то лучше взять какойнибудь fasm и писать в нём - там синтаксис лучше всего отшлифован.

Конверторы не встречал, но теоретически где то во вселенной они могут существовать.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (01.04.2014)