Регистр mtvec
непосредственно используется аппаратными средствами: это адрес первой инструкции, которая будет извлечена при обработке прерывания машинного режима.Предполагая, что ловушки включены, это может произойти в любое время, поэтому для программного обеспечения обычно небезопасно хранить произвольные значения в mtvec
.Фактически, mtvec
обычно записывается небольшое количество раз во время инициализации программного обеспечения машинного режима, а затем сохраняет это значение до сброса.
В отличие от этого, значение mscratch
никогда не используется напрямуюаппаратным обеспечением: он просто служит в качестве xlen
-битного длинного временного временного пространства, которое может использоваться программным обеспечением машинного режима, защищено от других привилегированных режимов и доступно без разрушения содержимого любого регистра X (черезИнструкция по обмену CSR).
Каноническим случаем является установка mtvec
последовательности сборки, которая сначала заменяет sp
на mscratch
, что приводит к чистому стеку обработки ловушек, который затем может быть использован дляостальные регистры перед входом в обработчик C-ловушек.Это позволяет программному обеспечению машинного режима обрабатывать прерывания без разрушения содержимого регистров X, что необходимо для многих общих системных функций, таких как мультипрограммирование.