堆疊段在實模式和保護模式下的工作方式相同,下面我們只介紹在實模式下的工作方式:
其中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的內容不變。
第三章 堆疊段的工作方式
堆疊段在實模式和保護模式下的工作方式相同,下面我們只介紹在實模式下的工作方式 其中ss 堆疊段暫存器,用來儲存堆疊段的初始位址 sp 堆疊指標暫存器,用來儲存堆疊段的棧頂偏移量。堆疊段初始化的工作如下 ss定位到堆疊段的起始位址 基位址,低位址 棧底位於堆疊段的有效位址的最末端 高位址 sp初始化為...
第三章 堆疊
1.基礎知識 堆疊可以實現很多的應用,遞迴的問題轉化成非遞迴形式,在本質上也是堆疊的問題.它是一種 filo 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...
定址方式 第三章
定址方式 有效位址 運算元所在單元的位址 定址方式 產生有效位址的方式 8086的定址方式有 1 立即定址 2 直接定址 3 暫存器定址 4 暫存器間接定址 5 基址定址 6 變址定址 7 基址變址定址 8 相對基址變址定址 1.立即定址 運算元直接放在指令中,緊跟在操作碼之後 立即定址示例eg1 ...