Не все так просто. При mov/push cs старшие 16 бит не меняются. При int N старшие 16 бит в стеке устанавливаются в 0 ЗЫ. Мне вообще непонятно почему push ax уменьшает вершину стека на 2, а push cs на 4 (естесно, речь идет о 32-х битном режиме). Если дело только в выравнивании стека по границе двойного слова, то почему бы и в 1-м случае уменьшать esp на 4 ЗЗЫ. Интересно, с AMD-шными процами все точно так же как с интел?
Хватит спорить о разрядности регистров. Все-таки тема о реальном 32-битном режиме. Когда-то давно я сделал мини-ОС в этом режиме. Но все исходники потерялись. Это выглядело примерно так: программа загружалась в DOS, переходила в RM32 перехватывала base и xms память DOS ставила свои драйвера HDD, FDD, клавы и тд исполняла программы формата *.32 (чистый код, типа com, только RM32) предоставляла им свои функции Так как память DOS не разрушалась, то предоставлялся сервис "выполнить прерывание DOS/BIOS", вплоть до выполнения программы. Для этого включался обычный реальный режим. То есть было что-то вроде расширителя DOS. Так вот, мне интересно, нужно ли это сейчас? Или лучше не париться, все равно никто не оценит.
droopy >> Так вот, мне интересно, нужно ли это сейчас? Или лучше не париться, все равно никто не оценит. Что значит "нужно"? Представляет ли твоя разработка коммерческую или практическую ценность - вряд ли. Будет ли на такой ОС кто-то реально работать - вряд ли. Насколько я понимаю, она похожа на простой вариант ОС для встраиваемых систем, но для нормального использования нужен как минимум компилятор, набор библиотек, набор драйверов. Имхо, всё это ковыряние в асме, а особенно в области осеписания - 99% for fun. На x86 типичному программисту на практике может пригодиться MMX с SSE для ускорения критических участков и некое "общее понимание" - для отладки. Но вот мне например fun А "нужно"/"не нужно" - какая разница?