組合語言 手記8

2021-09-08 05:58:23 字數 1829 閱讀 4952

棧有兩個基本的操作:入棧和出棧

入棧:將乙個新的元素放到棧頂

出棧:從棧頂取出乙個元素

棧頂的元素總是最**棧,需要出棧時,又最先被從棧中取出。

棧的操作規則:lifo

8086cpu提供相關的指令來以棧的方式訪問記憶體空間。

入棧出棧指令:

push(入棧)pop(出棧)

push ax   將暫存器ax中的資料送入棧中;

pop ax   從棧頂取出資料送入ax

均是以為單位進行的。

字型資料用兩個單元存放,高位址單元放高8位,低位址單元放低8位。

段暫存器ss 存放棧頂的段位址

暫存器sp 存放棧頂的偏移位址

任意時刻,ss:sp指向棧頂元素

push ax

1 sp=sp-2

2 將ax中的內容送入ss:sp指向的記憶體單元,ss:sp此時指向新棧頂。

當棧是空時,它指標會指向當前棧的最高位址的下一位址。

任意時刻,ss:sp指向棧頂元素,當棧為空的時候,棧中沒有元素,也就不存在棧頂元素。

所以ss:sp只能指向棧的最底部單元下面的單元,該單元的偏移位址為棧最底部的字單元的偏移位址+2

8086cpu的互作機理,只考慮當前的情況:

當前棧頂在何處

當前要執行的指令是哪一條。

將10000h-1000fh這段空間當作棧,初始狀態是空的,將ax,bx,ds中的資料入棧

抹空操作

不用mov來實現寫入操作

mov ax,1000h

mov ss,ax

mov sp,

2mov ax,2255h

push ax

push pop實質上就是一種記憶體傳送指令,可以在暫存器和記憶體之間傳送資料,與mov指令不同的是,push和pop指令訪問的記憶體單元的位址不是在指令中給出的,而是由ss:sp指定的。

push pop和mov不同的是,mov只需要一步傳送;而push pop指令卻需要兩步操作。

執行push時:先改變sp,後向ss:sp處傳送

執行pop時:現讀取ss:sp資料,後改變sp.

任何時刻ss:sp指向棧頂元素

8086只記錄棧頂,佔空間的大小要自己管理

如果記憶體從10000h-1ffff,描述棧為空時:

任意時刻,ss:sp指向棧頂元素,當棧為空的時候,棧中沒有元素,也就不存在棧頂元素,所以ss:sp只能指向棧的最底部單元下面的單元,該單元的偏移位址為棧最底部的字單元的偏移位址+2,棧最底部字單元的位址為1000:fffe,所以棧空時,sp=0000h

cpu都是16為傳送資料的,n<=64k.從棧操作指令所完成的功能的角度上來看,push pop等指令在執行的時候只修改sp.所以棧頂的變化範圍是 0-ffffh,從棧空時候的sp=0,一直壓棧,直到棧滿時sp=0;如果再次壓棧,棧頂將環繞,覆蓋了原來的內容。

posted @

2013-02-16 20:07

xingoo 閱讀(

...)

編輯收藏

組合語言 手記4

簡單的彙編指令 cpu執行後,暫存器中的資料改變為如下 cpu訪問記憶體單元時要給出記憶體單元的位址。所有的記憶體單元構成的儲存空間是乙個一維的線性空間。這個唯一的位址就是實體地址。16位結構描述了乙個cpu具有一下幾個方面特徵 1 運算器一次最多可以處理16位的資料。2 暫存器的最大寬度為16位。...

組合語言 手記7

cpu要讀取乙個記憶體單元的時候,必須先給出這個記憶體單元的位址 在8086pc中,記憶體位址由段位址和偏移位址組成。8086cpu中有乙個ds暫存器,通常用來存放要訪問的資料的段位址。mov al,0 mov已知的功能 1 將資料直接送入暫存器 2 將乙個暫存器中的內容送入另乙個暫存器中。3 將乙...

組合語言 手記2

彙編由以下3類組成 1 彙編指令 機器碼的助記符 2 偽指令 由編譯器執行 3 其他符號 由編譯器識別 組合語言的核心是彙編指令,它決定了組合語言的特性 cpu是計算機的核心部件,它控制整個計算機的運作並進行運算,要想讓乙個cpu工作,就必須提供指令和資料。指令和資料在儲存器中存放,也就是平時所說的...