8086汇编基础 push,pop指令执行时,sp怎么变
首先需要說明的是棧屬于滿遞減棧,即棧頂在高地址,棧底在低地址
push,指針向低處走。我向1000:0000處push數據,那么push之前,sp初-2=sp末。先sp-2,再寫入
pop,指針向高處走。我要提取1000:0000處的數據。那么pop之前,sp=0002。先讀取,后sp+2
也就是說 sp 始終指向了有效數據的位置。
一. 棧的執行過程下圖:
該圖注意如下:
1. 任意時刻, SS:SP指向棧頂元素
SS:存放棧的段地址;
SP:存放棧的偏移地址;
2. 棧底的地址大.
3. 棧是空的是什么意思?
例如: 將10000H----1000FH這段空間當作棧, 初始狀態棧是空的,? 此時, SS=1000H, 那么SP= ?
a. 棧底地址大.
b. 任意時刻, SS:SP指向棧頂元素
所以, 棧底地址就是SS:SP=1000FH 也就是SS=1000H, SP=0FH
棧底就是棧的第一個元素, 那空棧就是SS=1000H, SP=10H.
?
二. PUSH的執行過程
請記住:
1. SP先減2, SS:SP指向新的棧頂(SP是向小的方向走的)
2. 把數據送入新的棧頂.
?
三. POP的操作過程
POP的過程就是與PUSH相反了
1. 把棧頂數據(SS:SP指向的數據)送入寄存器
2.SP增加2.
?
四. 棧的越界問題需要我們自己小心注意, CPU并沒有機制來通知或者避免棧的越界.
五. PUSH與POP
PUSH和POP指令可以在寄存器和內存之間傳送數據, 格式如下
PUSH 寄存器
POP 寄存器
PUSH 內存單元
POP 內存單元
PUSH和POP指令實質是一種內存傳送指令, 可以靈活運用.
總結
以上是生活随笔為你收集整理的8086汇编基础 push,pop指令执行时,sp怎么变的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数调用栈 剖析+图解
- 下一篇: seg指令