Я в английском не силён, пришлось пользоваться переводчиком.
Цитата:
Указатель стека в сегменте стека должен быть выровнен по 16-разрядное (слово) или 32-разрядное (двойное слово) границы, в зависимости от ширины сегмента стека.
...
Процессор не проверяет выравнивание указателя стека. Это является обязанностью программ, задач и процедур, работающих на процессоре для поддержания правильного выравнивания указателей стека. Разрегулировывая указатель стека может привести к серьезной деградации производительности и в некоторых случаях сбои программы.
Вы внимательно прочли то, что мне приводите? На счёт "кратным четырём" я может и ошибаюсь, хотя выше в цитате это написано явно "32-разрядное (двойное слово)". Хорошо, пусть будет кратным 2.
Жду Ваших объяснений как это я смог под Win7-x64 увидеть некратные четырём значения в ESP без вылета программы?
Вы бы ещё на Win10 это попробовали! У меня в то время стоял x486, если не ошибаюсь. Это так, на всякий случай, может сейчас процессоры принципиально иной архитектуры. Попробуйте в
реальном режиме, или хотя бы под WinXP. И я посмотрю как Вы "с точностью до байта" настроите указатель. Если у меня XP-ишка в BSOD вылетала. Да, и возьмите реальный ассемблер(MASM), а не какой-то интерпретатор.
Про исключение я сейчас не вспомню где читал. Так как привести ссылку на литературу не могу, считайте что
соврал. Хоть это и не суть, но я ясно помню, что читал именно об этом. Я писал о том, что известно мне по своему опыту. Литературы такой, что вы мне привели у меня нет, да и английским владею с трудом.
P.S. В этой статье, что Вы мне привели, говорится о защищенном режиме, а то чтиво, что читал я могло быть о реальном режиме. Скорее всего оно так и было. А в этих режимах разные механизмы, и многое не документировано.