DOS bir .COM dosyasını yükledikten sonra SP kaydını neden 0xFFFE olarak ayarlıyor?


10

.COM dosyalarıyla ilgili wikpedia sayfasında https://en.wikipedia.org/wiki/COM_file okur:

DOS'taki .COM dosyaları tüm x86 segment kayıtlarını aynı değere ayarlar ve SP (yığın işaretçisi) 0xFFFE'ye kayıt yapar, böylece yığın bellek segmentinin en üstünde başlar ve oradan çalışır.

Ancak bu aslında yığını segmentin üst kısmından bir kelimeye başlayacak şekilde ayarlar. Yığına bir değer basarken CPU SP'yi 0xFFFC'ye düşürür ve değeri orada saklar, böylece segmentin en üst kelimesini boşa harcar. DOS'un SP'yi 0'a ayarlamamasının nedeni nedir?


6
DOS, bir int 20htalimat vererek programdan çıkabilmeniz için burada bir yönerge için bir işaretçi saklar ret.
fuz

Yanıtlar:


16

Bu, CP / M ile uyumluluk içindir.

CP / M'de kullanarak programınızdan geri dönebilirsiniz retve programınız temiz bir şekilde çıkacaktır. Bu, 0x0000yığının tepesinde bir a int 20hve adreste bir talimat olmasıyla başarıldı 0x0000. int 20hDOS'un bir programdan çıkmanın resmi yolu olsa da , programdan çıkma seçeneği call 0CP / M'den tutuldu ve en dıştaki kapsam ret, geri döndüğü için de aynı şekilde çalışıyor 0.

Bu 0x0000sözcüğü yığının üstünde tutmak için, kullanılabilir yığın 2 baytını daha da aşağıya doğru başlatmanız gerekir. Bu yüzden SPbaşlangıçta , talimatı 0xFFFEgösteren 0x0000kelimeyi işaret ediyor int 20h.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.