OSDev
http://osdev.su/

FASM для ARM, JVM и M6502 на макросах
http://osdev.su/viewtopic.php?f=18&t=1042
Страница 1 из 1

Автор:  Freeman [ 05 янв 2015, 22:58 ]
Заголовок сообщения:  FASM для ARM, JVM и M6502 на макросах

Набрел на интереснейшую страничку. У чувака явно черный пояс по макросам FASM, и с их помощью он делает производные от FASM языки. Все пока не изучал, глянул лишь на Micro-FASM (прямая ссылка). Он пишет, что вынес инструкции и регистры в макросы, и теперь их можно произвольно определять. В примерах есть ARM, байт-код Java и M6502.

Глубоко пока не копал, но идея абстрагирования вызывает уважение. Для ассемблера -- тем более. Если правильно понял описание, с помощью этой штуки можно писать переносимый код на ассемблере... Или я что-то путаю?

Автор:  Bargest [ 05 янв 2015, 23:56 ]
Заголовок сообщения:  Re: FASM для ARM, JVM и M6502 на макросах

Цитата:
Если правильно понял описание, с помощью этой штуки можно писать переносимый код на ассемблере... Или я что-то путаю?

Переносимый нельзя. Например, в JVM нет регистров. От слова совсем. Это стековая машина. А следовательно, скомпилировать один и тот же код под x86 и под JVM принципиально невозможно (в рамках ассемблера, конечно; я не рассматриваю вариант написания какого-нибудь ЯВУ типа Паскаля на макросах FASM'а:)). Да и вообще, у всех архитектур свой набор инструкций, и разные вещи устроены по-разному. Где-то есть даже хитровыдрюченные команды для подсчета CRC, а где-то элементарного умножения нету.
Если все же рассматривать вариант написания своего ЯВУ на макросах FASM, то, наверное, будет можно писать переносимый код. Но это уже по сути компилятор, только очень тупой: макросы разворачиваются в конкретный набор команд, а значит - прощай, оптимизация.
Так что польза тут скорее в том, что один и тот же FASM с помощью пары файлов с макросами можно заставить ассемблировать под разные архитектуры. Получаем все ассемблеры в одном.

Автор:  SII [ 06 янв 2015, 05:44 ]
Заголовок сообщения:  Re: FASM для ARM, JVM и M6502 на макросах

Bargest писал(а):
Так что польза тут скорее в том, что один и тот же FASM с помощью пары файлов с макросами можно заставить ассемблировать под разные архитектуры. Получаем все ассемблеры в одном.


И да, и нет. Технически с помощью макросов генерировать нужный машинный код, конечно, можно. Но вот обеспечить корректные записи перемещений, правильную отладочную информацию и т.п. намного сложней. Хотя, насколько понимаю, всё это на ФАСМе сделать можно, но... Это изврат какой-то будет, очень сложный в отладке и отличающийся низкой производительностью (по сравнению с нормально написанным транслятором, специально заточенным под нужную архитектуру). Ну и следует помнить о том, что макросы вряд ли позволяют покрыть все возможные особенности синтаксиса команд разных архитектур, т.е., возможно, придётся записывать команды не так, как принято для конкретной архитектуры -- а в общем и целом это не есть хорошо. Но, поскольку сам я ФАСМ не использовал, то утверждать не буду.

В общем же, в таких извращениях я в принципе не вижу никакого смысла. Максимум, для чего оно может потребоваться на практике, -- это добавление новых команд процессора, которые почему-то не внесены в собственно транслятор. Но, учитывая открытость ФАСМа и его активную поддержку, вряд ли реальная нужда в таком возникнет.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/