組合語言學習筆記 3

2021-05-10 05:55:41 字數 1309 閱讀 6620

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。實體地址表示方法 位址加法器,...