Написать обработчик исключения ILLEGAL_INSTRUCTION: оно возникает в RARS, например, при попытке обратиться к несуществующему CSR-регистру. Соответствующая инструкция при этом игнорируется и выполнение кода продолжается. Все остальные исключения должны считаться фатальными и приводить к останову программы с диагностикой «Exception №», где № — это десятичный номер исключения. К обработчику будет приписана проверяющая и соответствующий проверочный код. Метка обработчика должна называться handler:.
- Проверяющая программа:
1 main: 2 la t0 handler 3 csrw t0 utvec # обработчик прерывания 4 5 li t0 0x10 6 csrw t0 ustatus # UPIE=1, а PIE=0, т. е. прерывания «были разрешены», но пока запрещены 7 la t0 _test 8 csrw t0 uepc # начало программы пользователя 9 uret # восстанавливаем разрешение прерываний и переходим к программе
- Проверочный код для примера ниже:
10
На всякий случай: для экстренного выхода пользоваться ecall 10 (а не ecall 93)
10 Exception 5