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/ |