35.棧:先進後出,涉及到入棧(push)和出棧(pop)兩個概念.
a)push ax //表示將ax中的資料送入棧中
b)pop ax //表示從棧頂取出資料送入ax
36.8086cpu的入棧和出棧操作都是以字為單位進行的.那麼如何知道哪一段被當作棧在使用..?----how...?
push和pop時,需要知道棧頂元素..?----how...?
和cs:ip類似,在8086cpu中,有兩個暫存器ss和暫存器sp,棧頂的段位址存放在ss中,偏移位址在sp中.
37.任意時刻,ss:sp指向棧頂元素 .push和pop時,cpu從ss和sp中得到棧頂位址.
38.棧頂超界:和c語言中指標越界一樣,是很危險的操作,這個需要程式設計師自己控制.
39.push和pop指令:push和pop可以是如下格式的:
a)push 暫存器
b)pop 暫存器 //將暫存器中的資料入棧或者將棧頂元素送到暫存器中
c)push 段暫存器
d)pop 段暫存器 //同上
e)push 記憶體單元
f)pop 記憶體單元 //同上
40.執行指令時,cpu要知道記憶體單元的位址,可以在push,pop指令中只給出記憶體單元的偏移位址,段位址在執行指令時,從ss處獲得.
設定棧的大小:
mov ax,1000h
mov ss,ax
mov sp,0010h //ss和sp的差值就是棧的大小了,由程式設計師自己控制
41.push和pop與mov的區別是:兩次操作和乙個操作的關係.
42.棧段:被定義當作棧的一段連續的位址空間.----where...?設定ss和sp的值.
43.關於段的結論:可以將一段記憶體定義為乙個段,用乙個段位址指示段,用偏移位址訪問段的記憶體單元.-->自己設定.
用乙個段存放資料,稱為資料段;
用乙個段存放**,稱為**段;
用乙個段存放棧,稱為棧段.
對於資料段,段的位址存放在ds中,用mov,add,sub等訪問記憶體單元的指令時,cpu就是將我們定義的資料段中的內容當資料來訪問;
對於**段,段的位址存放在cs中,將第一條指令的偏移位址放在ip中,cpu就會執行我們定義的**段中的指令;
對於棧段,段的位址放在ss中,將棧頂單元的偏移位址放在sp中,這樣cpu在進行棧操作時,就將我們定義的棧段當棧空間來使用.
44.因此,一段記憶體是什麼區域,扮演什麼角色,關鍵在於cpu中暫存器的設定,即cs,ip,ss,sp,ds的指向.
組合語言學習筆記(3)
3.380x86指令系統 其指令系統可以是以下的6組 資料傳送指令 算術指令 邏輯指令 串處理指令 控制轉移指令 處理機控制指令 資料傳送指令 傳送指令mov 其目的運算元不能是立即碼 其目的操作時不能是 段 其目的運算元和源運算元不能都是段位址 ip不能作為源運算元,也不能作為目的運算元 立即數不...
組合語言學習筆記3
1.cpu是通過位址匯流排來指定儲存單元的,位址單元能傳送多少個不同的資訊,就表明cpu可以對多少個儲存單元進行定址 乙個cpu有n根位址匯流排,可以說這個cpu的位址匯流排寬度為n,這樣的cpu最多可以尋找2的n次方個記憶體單元 3.資料匯流排 cpu與記憶體或其它器件之間資料傳送石通過資料匯流排...
組合語言學習筆記
學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...