Синтаксис: at&t vs intel
Какой синтаксис для asm-вставки в плюсы тебе нравится больше?
Примеры at&t (не дают полного представления об особенностях синтаксиса) [GCC]: Код:
xorl %eax,%eax Код:
movb $0x0b,%al Код:
int $0x80 Код:
add edi,2 Код:
mov eax,edi Код:
mov eax,-1 ОПРОС ОТКРЫТЫЙ |
Ответ: Синтаксис: at&t vs intel
Цитата:
ЗЫ проголосовал за intel. Выглядит приятнее конечно, но, если не ошибаюсь, у at&t более навороченый синтаксис. |
Ответ: Синтаксис: at&t vs intel
Цитата:
|
Ответ: Синтаксис: at&t vs intel
|
Ответ: Синтаксис: at&t vs intel
Цитата:
|
Ответ: Синтаксис: at&t vs intel
Цитата:
|
Ответ: Синтаксис: at&t vs intel
|
Ответ: Синтаксис: at&t vs intel
|
Ответ: Синтаксис: at&t vs intel
В gcc/g++ можно использовать оба синтаксиса, переключая ключом -masm=intel|att.
Оба синтаксиса в gcc сохраняют контроль над отношением регистров и локальных переменных (входящие/выходящие параметры), в msvs насколько я знаю такого нет. Меняется сразу и инлайн и выходной асм код (который по ключу -S можно вывести). Более того мы можем указать компилятору не оптимизировать вставку: Код:
asm volatile ( ... ); Точно также можно поступить с переменными обозная их квалификатором volatile, хотя по идее компилятор должен и без него определять как используется переменная, volatile нужен скорей в тех случаях когда переменная может измениться внешнем для приложения образом, например в случае мапирования портов или внешних устройств. Я предпочитаю intel, и где можно переключаю на него, хотя некоторые программы (дебагеры, отладчики памяти и прочие) дают инфу в att полюбому, так что на практике приходится работать сразу с двумя синтаксисами. В инлайн вставках лучше использовать управляемые как гцц конструкции где можно указать входящие/выходящие регистры. Если же создаешь объектный файл целиком в асме то лучше взять какойнибудь fasm и писать в нём - там синтаксис лучше всего отшлифован. Конверторы не встречал, но теоретически где то во вселенной они могут существовать. |
Ответ: Синтаксис: at&t vs intel
Цитата:
|
Ответ: Синтаксис: at&t vs intel
Цитата:
|
Ответ: Синтаксис: at&t vs intel
Для некоторых решений атомарность не принципиальна. Например: не блокируемый цикл, условием выхода из которого является гарантированно однократная смена состояния флага. При этом цикл не обязательно спинблок в чистом виде (например, есть полезная нагрузка с требованием постоянного выполнения). Данный подход может быть оправдан при выполнении цикла на гарантированно отдельном ядре (а не за счёт разделения ресурсов одного ядра). Т.о. мы уверены, что спинблок не повлияет критично на поток, занимающийся управлением флагом.
Если же это спинблок, то требования к быстродействию (нет времени на переключение в режим ядра и адекватный сон) и/или малая вероятность захвата флага другим синхронизированным потоком, могут опять-таки оправдать использование обычного флага с volatile как примитива синхронизации. Правда, для последнего существуют (как обёртка) критические секции, которые (в отличие от семафоров) как раз первично* в режиме пользователя работают. Даже готовый метод есть - InitializeCriticalSectionAndSpinCount, и не менее удобный TryEnterCriticalSection (который на мьютексах делается костылём в виде ожидания в 0 мс). А чо-чо в новом стандарте, вроде, какие-то подвижки по поводу стандартизации работы с мп были, не? |
Ответ: Синтаксис: at&t vs intel
__
Цитата:
Цитата:
|
Часовой пояс GMT +4, время: 08:12. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot