《學習筆記》王爽組合語言 再論暫存器

2021-06-16 07:04:23 字數 1703 閱讀 9620

在上篇文章中,我們主要從cpu的角度複習了8086cpu的邏輯結構,形成實體地址的方法和相關的一些暫存器。這篇文章我們一記憶體訪問的角度來繼續學習幾個暫存器。

記憶體中字的儲存:

cpu中,用16位暫存器來儲存乙個字。高8位存放高位位元組,低8位存放低位位元組。在記憶體中儲存時,由於記憶體單元是位元組單元(乙個單元存放乙個位元組,8位),則乙個位元組要用兩個位址連續的記憶體單元來存放,這個字的低位位元組存放在低位址單元中,高位位元組存放在高位址單元中。高位址單元和低位址單元組成了字單元。

ds和[address]:

cpu在讀寫乙個記憶體單元時,必須給出這個記憶體單元的位址,在8086cpu中,記憶體位址單元有段位址和偏移位址組成。ds暫存器通常用來存放要訪問資料的段位址。比如我們要訪問10000h單元的內容,可以用如下的程式段進行:

mov bx,10000h

mov ds,bx

mov al,[0]

注意,ds暫存器不支援直接將資料放入其中,需要用乙個暫存器作為中間變數。

mov al,[0] = mov al,ds:[0]  即將10000h:0處記憶體單元的內容存入al中。

mov ,add ,sub指令:

mov指令有以下幾種形式:

mov 暫存器 , 資料            例如:mov ax , 8

mov 暫存器 , 暫存器        例如:mov ax  , bx

mov 暫存器 , 記憶體單元    例如:mov ax , [0]

mov 記憶體單元 , 暫存器    例如:mov [0] . ax

mov 段暫存器  , 暫存器   例如:mov ds , ax

add和sub指令同mov一樣,都有兩個運算元,它們可以有以下幾種形式:

add 暫存器 , 資料            例如:add ax , 8

add 暫存器 , 暫存器        例如:add ax , bx

add 暫存器 , 記憶體單元    例如:add ax , [0]

add 記憶體單元 , 暫存器    例如:add [0] , ax

sub 暫存器 , 資料            例如:sub ax , 9

sub 暫存器 , 暫存器        例如:sub ax , bx

sub 暫存器 , 記憶體單元    例如:sub ax,[0]

sub 記憶體單元 , 暫存器    例如:sub [0] , ax

cpu提供的棧機制:

8086cpu提供入棧和出棧指令,最基本的兩個是push(入棧)和pop(出棧)。

cpu如何知道棧頂的位置?顯然,也應該有相應的暫存器來存放棧頂的位址。8086cpu中,有兩個暫存器,段暫存器ss和暫存器sp,棧頂段位址存放在ss中,偏移位址存放在sp中。任意時刻,ss:sp指向棧頂元素。

push和pop指令有以下幾種格式:

push 暫存器      ;將乙個暫存器的資料入棧

pop 暫存器        ;出棧,用乙個暫存器接收出棧的資料

push 段暫存器  ;將乙個段暫存器中的資料入棧

pop 段暫存器    ;出棧,用乙個段暫存器接收出棧的資料

push 記憶體單元  ;將乙個記憶體單元中的資料入棧

pop 記憶體單元    ;出棧,用乙個記憶體字單元接收出棧資料

王爽組合語言 暫存器衝突問題

題目 設計乙個子程式,功能 將乙個全是字母,以0為結尾的字串,轉化為大寫 定義類似於 db cnversation 0 如下 由於在 塊中排版會有問題,所以就不放在裡面惹 assume cs code 定義要轉換的字元 data segment db word 0 db unix 0 db wind...

組合語言(王爽)第二章暫存器

乙個典型的cpu由運算器 控制器 暫存器等部件組成,部件之間靠內部匯流排連線。運算器進行資訊處理,暫存器進行資訊儲存 控制器控制各部件進行工作,內部匯流排連線各部件以進行資料的傳輸。不同的cpu暫存器的個數和結構都是不盡相同的。2.1通用暫存器 以8086為例,其內部所有暫存器都是16位的,即兩個位...

組合語言 王爽 學習筆記

1 mov a,b a b不能同時為一記憶體位址!2 bx bp si di 在 中,這4個暫存器可以單個出現,或只能以4種組合出現 bx和si bx和di bp和si bp和di。如組合 bx si idata 就是合法的。另外,順便說明一點,si di不能分成兩個8位暫存器使用。3 div指令 ...