Чому DOS встановлює реєстр SP на 0xFFFE після завантаження файлу .COM?


10

На сторінці вікіпедії про файли .COM https://en.wikipedia.org/wiki/COM_file воно гласить:

Файли .COM в DOS встановлюють всі регістри сегментів x86 на однакове значення, а SP (покажчик стека) реєструють 0xFFFE, таким чином стек починається в самому верху сегмента пам'яті і працює звідти.

Але це фактично встановлює стек починати одним словом внизу верхньої частини сегмента. При натисканні значення на стек CPU зменшить SP до 0xFFFC і збереже там значення, тим самим витрачаючи верхнє слово сегмента. Що є причиною того, що DOS замість SP не встановив 0?


6
DOS зберігає там вказівник на int 20hінструкцію, щоб ви могли вийти зі своєї програми, видавши retінструкцію.
фуз

Відповіді:


16

Це для сумісності з CP / M.

У CP / M ви можете просто повернутися зі своєї програми за допомогою програми, retі програма вийде чисто. Цього вдалося досягти, маючи 0x0000на верхній частині стека та вказавши int 20hінструкцію за адресою 0x0000. Незважаючи на те int 20h, що DOS є офіційним способом виходу з програми, можливість виходу з програми call 0була збережена з CP / M, і самий зовнішній обсяг retпрацює так само, як і повертається до 0.

Для того, щоб це 0x0000слово було у верхній частині стека, очевидно, потрібно запустити придатний стек на 2 байти далі, очевидно. Ось чому SPспочатку на 0xFFFE, вказуючи на те 0x0000слово, яке в свою чергу вказує на int 20hінструкцію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.