Сообщение от
weiv
Дело в том, что они портятся ниже регистра SP на момент немаскируемого прерывания, это в нормальной ситуации место использованных временных данных, так что их изменение ничего не меняет. Стек растет вниз, байты памяти перезаписываются с уменьшением SP, это штатное поведение. Но иногда команды работы со стеком используется для изощренных программистских приемов, не предполагающих записи в стек на определённых участках кода (перенос графики, чтение из таблиц). И вот тут порча даже двух байтов может привести к непредсказуемым результатам, от порчи графики до зависания со спецэффектами и сброса. А портятся они потому, что при вызове процедуры немаскированного прерывания (NMI) на стек всегда автоматически кладется адрес возврата в прерванную программу (а часто ещё и 2-4 байта содержимого регистровых пар, но это уже самой процедурой обработки NMI).