У меня есть несколько вопросов по прерыванию MMIX.Определением специального регистра rK является «регистр маски прерывания».Но, похоже, он обрабатывает разные события по-разному.
для битов ввода / вывода (давайте назовем ** бит: это нормальный случай. Когда приходит внешнее прерывание, если бит ** РК)= 0, бит rQ ** будет удерживать '1' до тех пор, пока бит ** rK не будет установлен на 1, и произойдет прерывание.
для S-бита (программа): в соответствии сисходный код mmix-pipe
, даже если S-бит rK равен 0, возникнет исключение безопасности, а S-бит rK изменится от 0 до 1. Таким образом, в положительном адресе S-бит rK должен быть1, и в отрицательном адресе S-бит rK не имеет никакого эффекта. Только S-бит rQ используется для сообщения системе о том, что "возникла проблема безопасности", S-бит rK кажется бесполезным.
для P-бита (программы): это печально, «инструкция исходит от привилегированного (отрицательного) виртуального адреса.» В mmix-doc.pdf. Но если ПК находится в отрицательном адресе, то P- RQ в rQбит не всегда будет установлен на 1. (mmix-pipe также не устанавливает P-бит rQ).Я могу доказать это: если все инструкции, которые выполнялись до «возобновления» insn, установят P-бит rQ в 1, то при возобновлении также будет установлен P-бит rQ в 1. В результате после возобновления «пользователь»Insn всегда будет вызывать ловушку.это невозможно.Таким образом, когда P-исключение запрещено, P-бит rQ не будет установлен в 1.поэтому P-бит РК не просто используется в качестве маски, он используется как «опция, позволяющая обойти проверку исключений».
Вот несколько вопросов.
Почему бы не сделать все биты РК просто маской для прерывания?Есть ли какая-то причина, по которой биты S / P настолько странные?
Делать биты программы других rQ (rwxnkb) равными 1, если соответствующие биты rK равны 0?
Как и в Neg-адресе, отключение не произойдет, биты DVWIOUZX удерживают 1 после того, как это произошло?