簡體   English   中英

8086中的堆棧段和堆棧指針

[英]stack segment and stack pointer in 8086

我對堆棧段(ss)和堆棧指針(sp)寄存器有點困惑。 當堆棧為空時,sp值是否等於ss值? 我讀到當我們將一個字(2字節)推入堆棧時,sp遞減2,如果第一個語句為真(sp = ss),那么我可以說如果堆棧不為空,則堆棧指針的值總是更小或者等於堆棧段的值是真的??。 如果我們影響sp的值,使它大於ss ??會發生什么? 即:mov ss,200h mov sp,400h mov ax,1010h push ax

請提前糾正任何錯誤

不, ss是像其他的段寄存器,例如csds 它們參與按照通常的實模式規則形成物理地址,如address = 16 * segment + offset ,其中在堆棧的情況下偏移來自sp 因此,在堆棧上推送的最后一項具有地址16 * ss + sp 除非您對堆棧結束有先驗知識,否則您不知道堆棧何時為空,並且與sp相比較的ss的數值根本沒有意義。

堆棧段(ss)寄存器和堆棧指針(sp)寄存器用於為堆棧創建地址的不同部分:

ss  aaaaaaaaaaaaaaaa----
sp  ----aaaaaaaaaaaaaaaa

使用的地址是ss * 16 + sp 段寄存器選擇整個1024 kB存儲空間的64 kB段,堆棧指針是該段內的偏移量。

當堆棧為空時,堆棧指針指向為堆棧分配的空間的頂部。

如果ss寄存器包含例如0200h,則堆棧段從02000h變為11fffh。 但是,實際堆棧可能小於堆棧段。 如果堆棧例如是16kB,那么sp從4000h開始並且在堆棧增長時朝向0000h。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM