Вы можете изменить существующие компиляторы с открытым исходным кодом, такие как GCC или Clang. Другие ответы предоставили вам ссылки о том, где узнать больше. Но эти компиляторы не предназначены для легко ретаргетинга; их «легче» перенастроить, чем компиляторы, чем другие компиляторы, ориентированные на конкретные цели.
Но если вы хотите, чтобы компилятор был относительно легко перенастроить, вам нужен тот, в котором вы можете явно указать архитектуру машины, а какой-то инструмент генерирует остальную часть компилятора (GCC делает это немного; я не думаю, что Clang / LLVM делает много, но я могу ошибаться здесь).
В литературе много такого, гугл "компилятор-компилятор".
Но для конкретного решения для C вы должны проверить ACE , поставщика компиляторов, который генерирует компиляторы по требованию клиентов. Не бесплатно, но я слышал, что они очень быстро создают очень хорошие компиляторы. Я думаю, что он производит стандартные двоичные файлы (ELF?), Поэтому пропускает этап ассемблера. (У меня нет опыта или отношений с ACE.)
Если вас не волнует качество кода, вы можете написать синтаксически-ориентированный перевод C на ассемблер, используя C AST. Вы можете получить C AST от GCC, Clang, возможно, ANTLR, и от нашего инструментария реинжиниринга программного обеспечения DMS .