一、匯編里的"PUSH"和"POP"起了什么功能,,誰(shuí)能用通俗點(diǎn)的話(huà)告訴我嗎??
SH”指令的功能是實(shí)現(xiàn)將一個(gè)寄存器中的數(shù)據(jù)壓入棧操作。PUSH的操作過(guò)程是: (SP)(SP)-2,((SP))<-OPRD。先修改堆棧指針SP(壓入時(shí)為自動(dòng)減2),然后,將指定的操作數(shù)送入新的棧頂位置。
匯編里的"POP"指令的功能是實(shí)現(xiàn)將一個(gè)寄存器中的數(shù)據(jù)彈出棧操作。POP的操作過(guò)程是:將堆棧段中當(dāng)前SS:SP所指的字內(nèi)容彈出到某個(gè)寄存器或段寄存器或內(nèi)存單元。再?SP←SP+2。
擴(kuò)展資料:
PUSH和POP指令對(duì)狀態(tài)標(biāo)志位沒(méi)有影響。PUSH指令每進(jìn)行一次壓入操作,都?jí)喝胍粋€(gè)字(16位)。OPRD為16位(字)操作數(shù),可以是寄存器或存儲(chǔ)器操作數(shù)。
若段描述符中的D\B位為1,則棧操作將使用ESP寄存器。先將ESP數(shù)值減去棧數(shù)據(jù)的長(zhǎng)度 sub esp,register's long.(sizeof register)。再將數(shù)據(jù)壓入棧:mov ss:[esp],register。
若段描述符中的D\B位為0,則棧操作將使用SP寄存器。先將SP數(shù)值減去棧數(shù)據(jù)的長(zhǎng)度 sub sp,register's long.(sizeof register)再將數(shù)據(jù)壓入棧:mov ss:[sp],register。
進(jìn)出棧,棧是FILO(first in last out),先進(jìn)后出
也就是把寄存器里的數(shù)據(jù)臨時(shí)保存一下,相當(dāng)與一個(gè)倉(cāng)庫(kù)
不是你說(shuō)的那樣子
假設(shè)eax=4,ebx=5
push eax
push ebx
pop eax
pop ebx
結(jié)果eax=5 ebx=4(體現(xiàn)了先進(jìn)后出)
堆棧是一端固定,另一端變化的特殊存儲(chǔ)空間,你可以把它想像成裝固體的桶,桶底(棧底)固定,桶里面所裝固體的最高處定義為桶頂(棧頂)。如果什么都沒(méi)有裝時(shí),桶頂和桶底相等,當(dāng)裝一層沙子后,桶頂升高(即棧頂?shù)刂罚?,相當(dāng)于入棧PUSH),再裝一層水泥,桶頂再次升高,(即棧頂?shù)刂酚郑?),當(dāng)你往出倒東西的時(shí)候,你先倒出最上層的水泥,桶頂下降(即棧頂?shù)刂罚?,相當(dāng)出棧POP),然后你才能倒出沙子。所以堆棧是先進(jìn)來(lái)的先出去。
push和pop是堆棧操作指令,push [reg]/[num] 是將reg寄存器中的值或是數(shù)字num壓入堆棧中,而pop [reg]是將堆棧棧頂?shù)闹祻棾龅絩eg寄存器中,并將這個(gè)值從堆棧中刪去.
堆棧可以看成是一個(gè)數(shù)組,但只能在棧頂(可以認(rèn)為是數(shù)組的一端)對(duì)數(shù)據(jù)進(jìn)行操作,起臨時(shí)保存數(shù)據(jù)的作用,32位匯編中,ss:esp指向堆棧棧頂,16位則是ss:sp.
我也不懂。
二、push ebp 怎么免殺??定位到這了、、、
這是入口點(diǎn),往下移一位。或者PUSH改POP。
三、匯編中進(jìn)棧出棧(push,pop)有什么作用,有點(diǎn)糊涂,請(qǐng)高手點(diǎn)撥,最好詳細(xì)一點(diǎn),謝謝!
堆棧有用來(lái)暫時(shí)保存數(shù)據(jù)、與子程序通訊兩個(gè)功能。
功能一、暫時(shí)保存數(shù)據(jù)
比如要調(diào)用某子程序,不希望子程序破壞寄存器BX,那么可以這樣
PUSH BX
CALL procXXX
POP BX
功能二、用來(lái)和傳遞參數(shù)給子程序
四、入棧指令push和岀棧指令pop可以保存數(shù)據(jù)嗎?
PUSH 指令,是保護(hù)數(shù)據(jù)。
POP 指令,是恢復(fù)。
五、匯編語(yǔ)言延時(shí) push pop
push / pop是支持32位的
