Как работает инструкция MIPS SYSCALL?
Мы хорошо понимаем, что существует три типа прерываний:
- Внутреннее прерывание
- Внешнее прерывание
- Программное прерывание
Таким образом, системный вызов является программным прерыванием. Инструкция MIPS SYSCALL в двоичном виде: 00000000000000000000000000001100
что происходит, когда процессор извлекает эту инструкцию и выполняет ее. параметры, переданные перед этой инструкцией в некоторых регистрах, здесь не имеют значения, ключевой вопрос заключается в том, что эта инструкция делает сама, какова его работа, как она работает внутри процессора.
Какое влияние на архитектуру машины оказывает выполнение только этой инструкции?
Это означает, какое значение регистра, на которое влияет этот системный вызов (инструкция), какой флаг он включает, за сколько шагов он завершает свою работу, если он переходит в другую область памяти (например, таблицу векторов прерываний), как он находит адрес этой памяти? местоположение.
1 ответ
Возможно, это зависит от того, о каком процессоре MIPS вы говорите, но в последней версии архитектуры MIPS32 инструкция SYSCALL вызывает исключение системного вызова, которое обрабатывается путем выполнения кода, расположенного по смещению 0x180 базы векторов исключений.
В частности, то, что происходит на CPU, реализующем выпуск 6 ISA MIPS32, следующее:
- Если Status.EXL == 0, то:
- Если инструкция SYSCALL в интервале задержки ветвления:
- EPC = ПК - 4
- Cause.BD = 1
- BadInstr = память [ПК]
- BadInstrP = память [ПК - 4]
- Если инструкция SYSCALL отсутствует в интервале задержки ветвления:
- EPC = ПК
- Cause.BD = 0
- BadInstr = память [ПК]
- Если SRSCtl.HSS > 0 и Status.BEV == 0, то:
- SRSCtl.PSS = SRSCTL.CSS
- SRSCtl.CSS = SRSCTL.ESS
- Если инструкция SYSCALL в интервале задержки ветвления:
- Cause.CE = не определено
- Cause.ExcCode = 0x8 (Sys)
- Status.EXL = 1
- Если Status.BEV == 0:
- ПК = 0xBFC0380
- Если Status.BEV == 1:
- ПК = EBase + 0x180
Имена Status, EPC, BadInstr, BadInstrP, SRSCtl, Cause и EBase являются регистрами Coprocessor 0 (CP0), поэтому вы не найдете их в большинстве документации MIPS. Суффиксы после точки (.) Обозначают подполя этих регистров.
Для получения дополнительной информации вы можете прочитать MIPS Architecture For Programmers Vol. III: Руководство по архитектуре привилегированных ресурсов MIPS32/microMIPS32.