diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index c40a8d8..94e583f 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -155,6 +155,13 @@ _Таблица 2. Значения сигнала `mem_size_o` при пере ## Обработка нелегальной инструкции +Существует множество причин, почему процессору может прийти на исполнение неподдерживаемая инструкция, в том числе: + +- ошибка компиляции: либо баг в самом компиляторе, либо компиляция с неверными параметрами; +- ошибка в аппаратуре (например сбой в работе памяти); +- намеренная вставка неподдерживаемой инструкции (например для эксплуатации какой-нибудь уязвимости); +- инструкция, которая на самом деле поддерживается процессором, но требует большего уровня привилегий и потому не может быть выполнена. + В случае появления инструкции, которая не поддерживается процессором, устройство управления должно обеспечить стабильность системы. В самом простом случае, такую инструкцию необходимо пропустить, сохранив так называемое **архитектурное состояние** процессора — т.е. сохранив значение всех элементов системы, характеризующих состояние системы в текущий момент. К таким элементам относятся: содержимое регистрового файла, основой памяти, содержимое регистров контроля и статуса и т.п. Значение программного счетчика также входит в архитектурное состояние процессора, однако в контексте пропуска инструкции с сохранением архитектурного состояния, его значение нужно изменить, иначе система оказалась бы в бесконечном цикле (неизменный счетчик бы указывал на ту же самую инструкцию, которая не должна менять архитектурного состояния). Иными словами, в случае появления нелегальной инструкции, устройство управления (роль которого в нашей системе по большей части играет декодер) должно проследить за тем, чтобы в системе не изменилось ничего кроме программного счетчика. К сигналам, влияющим на изменение архитектурного состояния относятся: @@ -166,9 +173,11 @@ _Таблица 2. Значения сигнала `mem_size_o` при пере - branch_o, - jal_o, - jalr_o, -- mret_o. +- mret_o, + +то есть, должны быть запрещены все запросы на запись, обращения в память и любые "прыжки" программного счетчика. + -Иными словами, должны быть запрещены все запросы на запись, обращения в память и любые "прыжки" программного счетчика. Давайте теперь разберемся с тем, какие именно инструкции должен будет поддерживать наш процессор.