全面剖析《自己動手寫作業系統》第三章–堆棧段的工作方式

來源:互聯網
上載者:User

 《自己動手寫作業系統》讀後感                   http://blog.csdn.net/zgh1988/article/details/7059936

全面剖析《自己動手寫作業系統》第一章       http://blog.csdn.net/zgh1988/article/details/7060032

全面剖析《自己動手寫作業系統》第二章       http://blog.csdn.net/zgh1988/article/details/7062065

全面剖析《自己動手寫作業系統》第三章1     http://blog.csdn.net/zgh1988/article/details/7098981

全面剖析《自己動手寫作業系統》--“實模式--保護模式--實模式”         
http://write.blog.csdn.net/postedit/7256254

       

        堆棧段在實模式和保護模式下的工作方式相同,下面我們只介紹在實模式下的工作方式:

其中SS 堆棧段寄存器,用來儲存堆棧段的初始地址;

SP 堆棧指標寄存器,用來儲存堆棧段的棧頂位移量。

       堆棧段初始化的工作如下:

        SS定位到堆棧段的起始地址(基地址,低地址),棧底位於堆棧段的有效地址的最末端(高地址)。SP初始化為堆棧段的大小,SS:SP永遠指向堆棧的棧頂。在初始化時,SS:SP指向堆棧段的最高地址(此時,棧底和棧頂都指向這一記憶體位址)。隨著壓入元素,SP不斷變小,進而SS:SP代表的棧頂地址變小,不在等於棧底地址,而是逐漸靠近堆棧段的起始地址,當SP為0時,SS:SP代表的棧頂地址與SS:0000代表的堆棧段的起始地址相等,進而確定棧滿,CPU也是通過判斷SP
<0來檢驗堆棧是否溢出的。 

        使用該堆棧段,執行下面一段代碼:

mov ax,1234H

push ax

        從這裡我們可以更清楚的看出來,SS指向的是堆棧段的起始地址,SS:SP指向的是棧頂,棧底為高地址。

       

        為了更清楚的理解堆棧段的工作方式,現在我們來看下面的題目:

如果一個堆棧從地址3250H:0000H開始,它的最後一個字的位移地址為0100H,SP的內容為0052H,問:

1   棧頂地址是什麼?

2   棧底地址是什麼?

3   存入資料1234H和5678H後,SP的內容是多少?

 

答案:

1   堆棧的最高地址叫棧底,堆棧指標SP總是指向棧頂。

     棧頂地址=(SS) × 10H + (SP)=3250H × 10H + 0052H=32552H

2   棧底地址=(SS) × 10H + 0100H = 32600H

3   8086CPU中堆棧存取必須以字為單位。存入資料1234H和5678H後,即兩個字壓入堆棧後,SP減4,SP的內容為:

(SP) - 字數 × 2=0052H - 2 × 2=004EH。SS的內容不變。

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.