第三章--堆栈段的工作方式
其中SS 堆棧段寄存器,用來存儲(chǔ)堆棧段的初始地址;SP 堆棧指針寄存器,用來存儲(chǔ)堆棧段的棧頂偏移量。
堆棧段初始化的工作如下:
?
SS定位到堆棧段的起始地址(基地址,低地址),棧底位于堆棧段的有效地址的最末端(高地址)。SP初始化為堆棧段的大小,SS:SP永遠(yuǎn)指向堆棧的棧頂。在初始化時(shí),SS:SP指向堆棧段的最高地址(此時(shí),棧底和棧頂都指向這一內(nèi)存地址)。隨著壓入元素,SP不斷變小,進(jìn)而SS:SP代表的棧頂?shù)刂纷冃?#xff0c;不在等于棧底地址,而是逐漸靠近堆棧段的起始地址,當(dāng)SP為0時(shí),SS:SP代表的棧頂?shù)刂放cSS:0000代表的堆棧段的起始地址相等,進(jìn)而確定棧滿,CPU也是通過判斷SP <0來檢驗(yàn)堆棧是否溢出的。
使用該堆棧段,執(zhí)行下面一段代碼:
mov ax,1234H
push ax
從這里我們可以更清楚的看出來,SS指向的是堆棧段的起始地址,SS:SP指向的是棧頂,棧底為高地址。
為了更清楚的理解堆棧段的工作方式,現(xiàn)在我們來看下面的題目:
如果一個(gè)堆棧從地址3250H:0000H開始,它的最后一個(gè)字的偏移地址為0100H,SP的內(nèi)容為0052H,問:
1 棧頂?shù)刂肥鞘裁?
2 棧底地址是什么?
3 存入數(shù)據(jù)1234H和5678H后,SP的內(nèi)容是多少?
答案:
1 堆棧的最高地址叫棧底,堆棧指示器SP總是指向棧頂。
棧頂?shù)刂?#61;(SS) × 10H + (SP)=3250H × 10H + 0052H=32552H
2 棧底地址=(SS) × 10H + 0100H = 32600H
3 8086CPU中堆棧存取必須以字為單位。存入數(shù)據(jù)1234H和5678H后,即兩個(gè)字壓入堆棧后,SP減4,SP的內(nèi)容為:(SP) - 字?jǐn)?shù) × 2=0052H - 2 × 2=004EH。SS的內(nèi)容不變。
總結(jié)
以上是生活随笔為你收集整理的第三章--堆栈段的工作方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “实模式--保护模式--实模式”转换过程
- 下一篇: 第五章--加载内核Kernel.bin