QtSPIM: Пояснение к коду, показанному без загрузки программы - PullRequest
0 голосов
/ 20 января 2020

Ассемблер QtSPIM MIPS уже показывает некоторые строки кода, даже если нет загруженной программы, как это можно увидеть на https://ecs-network.serv.pacific.edu/ecpe-170/tutorials/qtspim-tutorial.

Я предполагаю, что это требуется для загрузки программ , но мне было бы очень интересно точное объяснение, чтобы понять все детали.

1 Ответ

2 голосов
/ 20 января 2020

Программа QtSPIM состоит из двух частей: обработчика исключений и пользовательской программы.

Обработчик исключений по умолчанию включает в себя как короткую последовательность кодов запуска в пользовательском режиме (загружается в 0x00400000, так и Фактический обработчик исключений находится в памяти ядра .ktext, который начинается с 0x80000180,

. Когда вы загружаете вашу пользовательскую программу, она добавляется к коду пользовательского режима (из обработчика исключений) примерно в местоположении 0x00400024. Вы также можете видеть, что до тех пор, пока вы не загрузите свою программу с main, адрес main (в этом коде запуска) принимается равным 0, то есть неопределенным.

Вы можете заменить обработчик исключений по умолчанию с вашим собственным. Используйте меню Simulator, подменю Settings, вкладку MIPS, Load Exception Handler (или Use default exception handler).

В вашем файле обработчика исключений вы бы поместили свой фактический обработчик после директивы .ktext, и вы положили бы свою стартовую последовательность после директивы .text - которая является необязательной. Если вы не предоставите ее, то main некуда возвращаться, поэтому завершить сеанс Обычно, вам придется выходить через syscall вместо простого возврата.

Другой популярный симулятор, MARS, не включает эту последовательность кодов запуска по умолчанию в пользовательском режиме, поэтому программы MARS всегда должны выходить из * 1026. * использование системного вызова.

Обработчик исключений по умолчанию выводит причину исключения и больше ничего не делает.

Если вы хотите выполнить консольный ввод-вывод, управляемый прерываниями, вы должны написать ваш собственный обработчик исключений, например. QtSPIM также поддерживает таймер, который также использует механизм прерываний. Вы также можете реализовать обработчик прерываний (инструкции teq, tne, teqi, tnei), но инструкция syscall всегда обрабатывается QtSPIM вне механизма обработки исключений MIPS.

...