Имеют ли немаскируемые прерывания приоритет над текущей инструкцией?

Я работаю над курсом ассемблера, и меня озадачил следующий вопрос. Я пытался воспроизвести это в коде, но в симуляторе сложно воспроизвести ситуацию.

Значение 5 хранится по адресу 0x0000100. В тот самый момент, когда процессор оценивает инструкцию INCB 0x0000100, возникает прерывание NMI, вызывающее подпрограмму, которая умножает значение по адресу 0x0000100 на 2. Каким будет окончательное значение по адресу 0x0000100?

Я немного запутался, завершится ли текущая инструкция до того, как будет обработано прерывание, или она будет немедленно отменена.


person JonathanReez    schedule 26.04.2015    source источник
comment
Текущая инструкция будет выполнена первой. В руководстве сказано: Все прерывания гарантированно выполняются на границе инструкции.   -  person Jester    schedule 26.04.2015
comment
Последовательность прерываний начнется в конце текущего командного цикла. Некоторые инструкции занимают больше времени, чем другие. Время от входа сигнала до начала прерывания называется его задержкой. Таким образом, значение по адресу 0x0000100 будет 6 в начале обработки NMI.   -  person Weather Vane    schedule 26.04.2015


Ответы (1)


Обработчики NMI используют точно такие же циклы выборки, обработки и записи, как и любой другой код, пока они работают (вы не хотите без необходимости дублировать вентили). Он просто сохраняет состояние процессора, заталкивает текущий счетчик программ в стек и меняет ПК на обработчик прерываний. Когда вызывается возврат из прерывания, он продолжает работу с того места, на котором остановился.

Как он мог это сделать, если позволял частичные инструкции?

(Не хочу быть язвительным - я просто нахожу "почему" более интересным, чем "что")

person Mike    schedule 27.04.2015