汇编:栈
? 棧是一段連續(xù)的內(nèi)存單元,也就是一段連續(xù)的內(nèi)存地址。
?需要特殊的訪問(wèn)形式--才能訪問(wèn)棧。
?
? 棧的模型就像一個(gè)箱子,通過(guò)"入棧","出棧"操作棧這個(gè)箱子, 這個(gè)箱子還有一個(gè)標(biāo)記"棧頂",永遠(yuǎn)指向棧的頂部。
?
?從內(nèi)存角度看:?
? 入棧: push, ?將16位寄存器或者內(nèi)存中的字型數(shù)據(jù) ----->棧頂標(biāo)記的上面。
? 出棧: pop ? ? 將棧頂標(biāo)記所標(biāo)識(shí)的字型數(shù)據(jù) -----> 16位寄存器或內(nèi)存中。
?
在8086cpu中,在任意時(shí)刻,將段地址寄存器ss和偏移地址寄存器sp所組合出來(lái)的內(nèi)存地址當(dāng)做棧頂標(biāo)記。
? push ax ? # 修改sp寄存器中的數(shù)值, ?SP?= SP?- 2
? ? ? ? ? ? ? ? ? ? ?將ax中的字型數(shù)據(jù) -----> SS:SP所組合出來(lái)的內(nèi)存地址中, ?入棧
?
? pop bx ?# SS:SP所組合出來(lái)的內(nèi)存地址中的字形數(shù)據(jù) ----> ?bx
? ? ? ? ? ? ? ? ? 修改棧頂標(biāo)記, SP = SP + 2 ? ? 出棧
?
改變ss,sp寄存器的內(nèi)容
棧的越界
? ? ? 當(dāng)sp為0了,然后接著執(zhí)行push操作, ss的值并不會(huì)改變,而sp從0000變成FFFE,再執(zhí)行push, sp就又減2個(gè)字節(jié),變成FFFC...sp的變化范圍就是0000-FFFF,也就是 2^16個(gè)字節(jié),即64kb.
?
棧的作用:
? ?1. 棧可以臨時(shí)性保存數(shù)據(jù)。 2. 可以交換數(shù)據(jù)。
? ? ?交換寄存器中的數(shù)據(jù)
交換兩個(gè)內(nèi)存中的數(shù)據(jù)
總結(jié)
- 上一篇: 汇编(8086cpu): 字节数据(by
- 下一篇: 汇编:内存段的安全