เหตุใด DOS จึงตั้งค่า SP register เป็น 0xFFFE หลังจากโหลดไฟล์. COM


10

ในหน้า wikpedia เกี่ยวกับไฟล์. COM https://en.wikipedia.org/wiki/COM_fileจะอ่าน:

ไฟล์. COM ใน DOS ตั้งค่าเซกเมนต์ x86 ทั้งหมดที่ลงทะเบียนเป็นค่าเดียวกันและ SP (ตัวชี้สแต็ค) ลงทะเบียนเป็น 0xFFFE ดังนั้นสแต็กจะเริ่มต้นที่ด้านบนสุดของเซ็กเมนต์หน่วยความจำและทำงานจากที่นั่น

แต่นี่จะเป็นการตั้งค่าสแต็กให้เริ่มหนึ่งคำด้านล่างด้านบนของกลุ่ม เมื่อกดค่าบนสแต็ก CPU จะลด SP เป็น 0xFFFC และเก็บค่าไว้ที่นั่น สาเหตุที่ DOS ไม่ตั้งค่า SP เป็น 0 แทนคืออะไร


6
DOS เก็บตัวชี้ไปที่int 20hคำสั่งเพื่อให้คุณสามารถออกจากโปรแกรมของคุณได้โดยการออกretคำสั่ง
fuz

คำตอบ:


16

นี่คือการเข้ากันได้กับ CP / M

ใน CP / M คุณสามารถกลับมาจากโปรแกรมของคุณโดยใช้retและโปรแกรมของคุณจะออกอย่างหมดจด นี่คือความสำเร็จโดยมี0x0000ที่ด้านบนของสแต็คและมีการเรียนการสอนตามที่อยู่int 20h 0x0000แม้ว่าจะint 20hเป็นวิธีการอย่างเป็นทางการ DOS' เพื่อออกจากโปรแกรมที่เลือกที่จะออกจากโปรแกรมโดยใช้call 0ถูกเก็บไว้จาก CP / M และนอกขอบเขตการทำงานเช่นเดียวกับดีตั้งแต่มันจะกลับไปret0

เพื่อให้มี0x0000คำนั้นอยู่ที่ด้านบนสุดของสแต็กคุณจะต้องเริ่มใช้สแต็ก 2 ไบต์ที่ใช้งานได้ต่อไปอย่างเห็นได้ชัด นั่นเป็นสาเหตุที่SPเริ่มแรก0xFFFEชี้ไปที่0x0000คำนั้นซึ่งชี้ไปที่int 20hคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.