วันอังคารที่ 28 กรกฎาคม พ.ศ. 2552

DTS04-22-07-2552

7/28/2009

DTS04/22/07/2552
Stack

-สแต็ก คือ ส่วนที่ใช้สำหรับอ่านและเขียนในหน่วยความจำ (RAM) และใช้สำหรับ CPU เท่านั้นในการนำข้อมูลเข้าไปเก็บ ซึ่งเป็นที่เก็บข้อมูลชั่วคร่าว เพราะว่าพื้นที่ที่ใช้สำหรับเก็บข้อมูลของ CPU (รีจีสเตอร์) มีใช้งานอย่างจำกัดในส่วนที่เป็นสแต็กเราจะมีรีจีสเตอร์ที่ใช้อยู่ 2 ตัวคือ SS(Stack Segment) และ SP(Stack Pointer) โดยที่ SS จะเป็นตัวกำหนดที่อยู่ของสแต็ก และมี SP เป็นตัวชี้ที่อยู่ของข้อมูลแต่ละตัว โดยจะมีคำสั่งที่ใช้สำหรับเขียนและอ่าน อยู่ 4 คำสั่ง คือคำสั่งที่ใช้สำหรับเขียน PUSH คำสั่งที่ใช้สำหรับอ่าน POP คำสั่งที่ใช้สำหรับเก็บสถานะของแฟล็ก PUSHF คำสั่งที่ใช้สำหรับอ่านสถานะของแฟล้ก POPFการเก็บข้อมูลลงในสแต็ก PUSHในการเก็บข้อมูลลงในสแต็กนั้น จะทำการลดค่าของ SP ลงครั้ง 2 ไบต์ในการเขียนแต่ละครั้ง เพราะว่าในการเขียนแต่ละครั้งจะทำการเขียนครั้งละ 16 บิต ซึ่งต้องใช้หน่วยความจำ 2 ไบต์ และในเก็บข้อมูลลงสู่สแต็ก นั้นใน 80x86 จะทำการเก็บไบต์ต่ำก่อน สมมุตว่า AH = 24H และ AL=12H เมื่อเราใช้คำสั่ง PUSH AX และนำไปเก็บในตำแหน่งหน่วยความจำที่แอดเดรส SS:1234 เก็บข้อมูลดังนี้ 12H และตำแหน่งที่ SS:1235 จะเก็บข้อมูลดังนี้ 24Hการอ่านข้อมูลออกจากสแต็ก POPในการในการอ่านข้อมูลออกจากสแต็กนั้น จะทำการเพิ่มค่าของ SP ขึ้นครั้ง 2 ไบต์ในการอ่านแต่ละครั้ง เพราะว่าในการอ่านแต่ละครั้งจะทำการอ่านครั้งละ 16 บิต ซึ่งต้องใช้หน่วยความจำ 2 ไบต์ และในอ่านข้อมูลออกจากสแต็ก นั้นใน 80x86 จะทำการอ่านไบต์ต่ำก่อน สมมุตว่าที่แอดเดรสที่ SS:1234Hมีข้อมูลดังนี้ 12H และที่ตำแหน่ง SS:1235Hมีข้อมูล 24Hตามลำดับ เมื่อเราใช้คำสั่ง POP AX ข้อมูลในรีจีสเตอร์ AX จะได้ดังนี้ AH=24H และAL=12H***สิ่งที่นำเข้าก่อนออกหลัง เช่น การวางกองผลไม่ที่เป็นรูปสามเหลี่ยม*

ไม่มีความคิดเห็น:

แสดงความคิดเห็น