Раздел 1.6 непривилегированной спецификации RISC-V определяет, что исключения вызываются инструкциями, а прерывания вызываются внешними событиями.
Когда возникает (синхронно) исключение , запускаетсяИнструкция не может быть выполнена правильно. Следовательно, для обратного адреса есть две возможности: либо сама инструкция, либо следующая инструкция. Оба решения имеют смысл. Если это указывает на саму инструкцию, легче определить проблему и реагировать соответственно. Если он указывает на следующую инструкцию, адрес не нужно увеличивать при возврате из обработчика исключений
(асинхронный) прерывания различны, они прерывают поток выполненных инструкций независимого потока,Поэтому существует только одно разумное решение для обратного адреса: первая инструкция, которая еще не выполнена. Таким образом, при возврате из обработчика прерываний выполнение продолжается именно там, где оно было прервано.
На этом фоне краткое определение в разделе 3.1.15 привилегированной спецификации RISC-V
Когда ловушка переводится в M-режим, mepc записывается с виртуальным адресом инструкции, которая была прервана или столкнулась с исключением.
ясно: mepc указывает на первую незавершенную инструкциюпри возникновении прерывания или инструкции, вызвавшей исключение.