在上篇文章中,我們主要從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指令 ...