第11章 棧(X86匯編教程)
棧操作內(nèi)存的方法是寫入的時(shí)候把數(shù)據(jù)一個(gè)一個(gè)推進(jìn)去,寫一次推一個(gè)數(shù)據(jù).而提取數(shù)據(jù)當(dāng)然也是一個(gè)一個(gè)提取出來.注意:提取過的數(shù)據(jù)就會消失(實(shí)際上沒有消失,可以再次提取,但....那還不如直接用正常方式操作內(nèi)存呢..).不像普通內(nèi)存操作可以反復(fù)讀取.棧提供了一種"后進(jìn)先出"的數(shù)據(jù)操作方法.把最后放進(jìn)內(nèi)存的數(shù)據(jù)最先拿出來.這種內(nèi)存操作方法在某些方面會有巨大的用處.
本文引用地址:http://m.butianyuan.cn/article/201612/324268.htm使用棧來操作內(nèi)存,先在內(nèi)存中定義一個(gè)位置,作為"棧頂",這個(gè)定義的方法也沒啥,直接把你要作為棧頂?shù)膬?nèi)存地址寫進(jìn)SS:SP寄存器即可.這2個(gè)寄存器就是"棧頂指針寄存器組合" (一般系統(tǒng)會自動定義棧頂,無需自己操作,所以這步可以跳過,知道SS:SP寄存器的作用即可.)
我們用堆棧往內(nèi)存里面推入數(shù)據(jù)之后,棧頂就會移動(自動的喲!).所以不用擔(dān)心會把曾經(jīng)推進(jìn)堆棧的數(shù)據(jù)覆蓋(當(dāng)然,你可別因?yàn)檫@樣就拼命往堆棧里邊壓數(shù)據(jù)...內(nèi)存會爆掉的[=_=0])
CPU用堆棧操作內(nèi)存的步驟:
數(shù)據(jù)入棧:
1:往內(nèi)存的[SS:SP]寫入數(shù)據(jù)
2:新的SP寄存器值=SP寄存器值-入棧數(shù)據(jù)的長度(單位:字節(jié),一般是字形數(shù)據(jù).也就是2個(gè)字節(jié))
數(shù)據(jù)出棧:
1:SP寄存器值+出棧數(shù)據(jù)的長度(同上個(gè)括號)
2:在[SS:SP]讀取數(shù)據(jù)
然后,用棧操作指令就能把數(shù)據(jù)推進(jìn)棧里,或從棧里把數(shù)據(jù)弄出來....
評論