Mengapa DOS mengatur register SP ke 0xFFFE setelah memuat file .COM?

10

Pada halaman wikpedia tentang file .COM https://en.wikipedia.org/wiki/COM_file berbunyi:

File .COM di DOS mengatur semua register segmen x86 ke nilai yang sama dan SP (stack pointer) mendaftar ke 0xFFFE, sehingga tumpukan dimulai di bagian paling atas dari segmen memori dan bekerja turun dari sana.

Tapi ini sebenarnya mengatur tumpukan untuk memulai satu kata di bawah bagian atas segmen. Ketika mendorong nilai pada stack, CPU akan menurunkan SP ke 0xFFFC dan menyimpan nilai di sana, sehingga membuang-buang kata teratas dari segmen tersebut. Apa alasan DOS tidak mengatur SP ke 0?

tangga
sumber
6
DOS menyimpan pointer ke int 20hinstruksi di sana sehingga Anda dapat keluar dari program Anda dengan mengeluarkan retinstruksi.
fuz

Jawaban:

16

Ini untuk kompatibilitas dengan CP / M.

Di CP / M, Anda cukup kembali dari program menggunakan retdan program Anda akan keluar dengan bersih. Ini dicapai dengan memiliki 0x0000di bagian atas tumpukan, dan memiliki int 20hinstruksi di alamat 0x0000. Meskipun int 20hmerupakan cara resmi DOS untuk keluar dari suatu program, opsi untuk keluar dari program menggunakan call 0disimpan dari CP / M, dan lingkup terluar retbekerja sama juga karena ia kembali ke 0.

Untuk memiliki 0x0000kata itu di bagian atas tumpukan, Anda harus memulai tumpukan 2 byte yang dapat digunakan lebih jauh, jelas. Itulah sebabnya SPawalnya 0xFFFE, menunjuk ke 0x0000kata yang pada gilirannya menunjuk ke int 20hinstruksi.

CherryDT
sumber