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?
int 20h
instruksi di sana sehingga Anda dapat keluar dari program Anda dengan mengeluarkanret
instruksi.Jawaban:
Ini untuk kompatibilitas dengan CP / M.
Di CP / M, Anda cukup kembali dari program menggunakan
ret
dan program Anda akan keluar dengan bersih. Ini dicapai dengan memiliki0x0000
di bagian atas tumpukan, dan memilikiint 20h
instruksi di alamat0x0000
. Meskipunint 20h
merupakan cara resmi DOS untuk keluar dari suatu program, opsi untuk keluar dari program menggunakancall 0
disimpan dari CP / M, dan lingkup terluarret
bekerja sama juga karena ia kembali ke0
.Untuk memiliki
0x0000
kata itu di bagian atas tumpukan, Anda harus memulai tumpukan 2 byte yang dapat digunakan lebih jauh, jelas. Itulah sebabnyaSP
awalnya0xFFFE
, menunjuk ke0x0000
kata yang pada gilirannya menunjuk keint 20h
instruksi.sumber