Какой ассемблер нацелиться? - PullRequest
3 голосов
/ 05 марта 2010

Я создаю игрушечный компилятор как учебный проект и сейчас нахожусь на стадии генерации кода.Я нашел эту страницу , описывающую множество различных ассемблеров, на которые я мог бы ориентироваться, и я хотел бы получить некоторые рекомендации по выбору.

Моя цель состоит в том, чтобы оптимизировать мой опыт обучения - для этогоВ конце концов, я пытался принимать решения, которые дадут мне самые полезные знания в будущем.Вот некоторые примеры:

  • с использованием большого количества промежуточных шагов, вместо перехода от AST к ASM
  • для x64 / Linux, а не для JVM или LLVM

Я понимаю, что это довольно субъективно, поэтому постараюсь уточнить: я предпочитаю открытый код проприетарному, широко используемому, а не широко используемому, широкому и конкретному.С этой целью я бы избегал чего-то вроде HLA, поскольку это более «специфично», чем истинный ASM.

Если что-то из этого звучит особенно неосведомленно, я все еще учусь, поэтому не стесняйтесь сообщать мне,я "делаю это неправильно".

Ответы [ 2 ]

2 голосов
/ 05 марта 2010

Считаете ли вы цель, отличную от x86, такую ​​как более чистый процессор RISC (компьютер с сокращенным набором команд), такой как MIPS, который можно протестировать с помощью программного эмулятора MIPS ?

В противном случае я бы сказал, что для Linux я бы рассмотрел стиль NASM для вывода вашей сборки или промежуточный формат. Я полагаю, что YASM, FASM поддерживают совместимость либо по умолчанию, либо по флагам, и используют синтаксис Intel, в отличие от газа GNU, который использует синтаксис AT & T, который широко считается неуклюжим или хуже, но совместим с выводом gcc.

0 голосов
/ 05 марта 2010

Если вы создаете ASM, нет никаких причин использовать какие-либо расширенные функции, поэтому я не думаю, что есть что-то, что можно продать кому-либо. Вы можете быстро выполнить сканирование нескольких из них, а затем просто выбрать наиболее удобный для вас способ запуска и запуска.

Кроме того, имейте в виду, что если вы избежите чего-либо, кроме основной функции, и с небольшой тщательностью создадите выходной код ASM, вы сможете переключиться на другой формат ассемблеров, лишь немного переключив строки выходного формата (IIRC printf может выбирать параметры по позиции, чтобы вы могли даже менять порядок параметров). Я не написал бы это, чтобы сделать это заранее, но если вы помните, что вы можете захотеть позже, он может заплатить позже.

...