У меня большие проблемы с тем, чтобы мой скомпилированный файл сборки работал на SPIM. В основном я хочу написать файл С++, а затем создать файл .s, который я могу открыть в SPIM без ошибок. Это означает, что сборка должна быть в MIPS32 ABI с использованием инструкций MIPS I (некоторые MIPS II). Как мне это сделать? Сейчас я использую g++, но у меня возникают серьезные ошибки, когда я пытаюсь запустить файл в SPIM. Я работаю над MAC OSx 10.6.3 и удаленно компилирую на Linux-машине. Есть ли специальный компилятор, который облегчит мне задачу?
Преобразование кода C++ в сборку для SPIM
Ответы (1)
Дайте компилятору опцию -S, он сгенерирует ассемблерный код. Затем вам придется отредактировать код, чтобы SPIM его принял.
Вам также понадобится g++ -S -fno-delayed-branch
, если вы включите оптимизацию, например -O1
или -Og
, для более читаемого кода. Обычно SPIM настроен для имитации MIPS без слотов задержки ветвления, но gcc будет предполагать, что инструкция после ветвления выполняется, даже если она была принята. -fno-delayed-branch
заставляет gcc заполнить все слоты задержки ветвления с помощью nop
.
Еще одна полезная опция — -fverbose-asm
, чтобы gcc добавлял комментарии с именем переменной C каждого операнда.
Вам следует избегать использования библиотек C++, таких как std::vector
, которые компилируются в большое количество дополнительного кода по сравнению с локальными массивами, особенно без оптимизации, если только вам действительно не нужны эти функции.