組合語言 (二) 暫存器

2022-01-19 20:38:22 字數 2917 閱讀 4161

乙個典型的cpu由運算器、控制器、暫存器等器件構成,這些器件依靠內部匯流排相連。與cpu內部的匯流排相對的則是外部匯流排。

在cpu中:

• 運算器進行資訊處理

• 暫存器進行資訊儲存

• 控制器控制各種器件進行工作

• 內部匯流排連線各種器件,在他們之間進行資料的傳送

彙編程式設計師通過改變各種暫存器中的內容來實現對cpu的控制。

不同的cpu,暫存器的個數、機構是不相同的。8086cpu有14個暫存器。

這些暫存器分別為:ax,bx,cx,dx,si,di,sp,bp,ip,cs,ss,ds,es,psw。

8086的所有暫存器都是16位的,可以存訪兩個位元組。其中ax,bx,cx,dx這四個暫存器通常用來存放一般性的資料,被稱為通用暫存器。

同時為了保證相容(8086的上代cpu暫存器都為8位),8086cpu的四個通用暫存器都可以分為兩個獨立使用的8位暫存器來使用。

ax的低8位構成了al暫存器,高8位構成了ah暫存器。ah和al暫存器是可以作為獨立使用的8位暫存器。

ax可分為ah,al。bx可分為bh,bl,以此類推。

處於對相容性的考慮,8086cpu可以一次性處理一下兩種尺寸的資料

位元組:byte,可以存放在8位暫存器中

字:word,乙個字由兩個位元組組成。這兩個位元組分別稱為這個字的高位元組和低位元組

比如在ax中,ah和al中的資料既是分別獨立的兩個位元組,也是ax中字的高位元組和低位元組。

同時需要注意,指令的兩個操作物件的位數應當是一致的。

cpu在訪問記憶體單元時,需要給出記憶體單元的位址。所有的記憶體單元儲存空間是乙個以為的線性空間,每個記憶體單元在這個空間中都有唯一的位址,我們將這個唯一的位址稱為實體地址。

cpu通過位址匯流排送入儲存器的,必須是乙個記憶體單元的實體地址。在cpu向位址匯流排發出實體地址之前,必須要在內部先形成這個實體地址。不同的cpu可以有不同的形成實體地址的方式。

這裡談到的是8086如何在內部形成實體地址。

16位機構(16位機,字長為16),描述了cpu具有下面幾個方面的結構特性:

• 運算器一次最多可以處理16位資料

• 暫存器的最大寬度位16位

• 暫存器和運算器之間的通路為16位

即是說,在8086中,能夠一次性處理,傳輸,暫存的資訊的最大長度為16位。

8086cpu擁有20位位址匯流排,可以傳送20位位址,達到1mb的定址能力。但是8086一次能處理的位址為16位。

所以8086採用在內部使用兩個16位位址合成乙個20位實體地址的方法。

實體地址 = 基礎位址+偏移位址

位址加法器做的工作就是使用 段位址*10h+偏移位址 的方法合成實體地址。

記憶體物理上並沒有段的概念。段的概念來自於8086cpu使用的「基礎位址(段位址*16)+ 偏移位址 = 實體地址」獲取記憶體單元實體地址的方式.

我們將若個個連續的記憶體單元看成乙個資料段,用基礎位址(段位址*16)定位段的起始位置。同時因為偏移位址為16為,所以乙個段的最大程度為64kb。

sa*16+ea=實體地址

段位址在8086cpu中的四個段暫存器中儲存。cs,ds,ss,es。8086方位記憶體時由這4個段暫存器提供記憶體單元的段位址。

cs和ip是8086cpu中最關鍵的兩個暫存器.

cs為**段暫存器,ip為指令指標暫存器。

在8086pc機種,任意時刻,設cs內容為m,ip內容為n。8086cpu將從記憶體m*16+n開始,讀取一條指令並執行。

即,8086機中,任意時刻,cpu將cs:ip指向的內容當作指令執行。

每當讀取一條指令,ip中的偏移值就會自增。增加的大小,取決於指令的長度。

在8086cpu加電啟動或者復位(cpu剛開始工作),cs和ip被設定稱為cs=ffffh,ip=0000h。即8086開機執行的第一條指令為ffff0h單元起始的指令。

現在我們可以回答,在記憶體中,指令和資料沒有任何區別,都是二進位制資料,cpu如何區分指令和資料。

cpu將cs:ip指向的記憶體單元中的內容看作指令,因為8086將cs,ip中的內容當作指令的段位址和偏移位址。如果說記憶體中的一條資訊曾被cpu執行過的話。那麼其所在的記憶體單元一定被cs:ip執行過。

8086中大部分暫存器的值都可以用mov(傳送指令)來改變。但mov指令不能用來設定cs,ip的內容,因為8086沒有提供這個功能。

能夠更改cs,ip的內容的指令被統稱為轉移指令。最簡單的轉移指令jmp

如果僅想更改ip的值,則採用jmp 某一合法暫存器的指令來完成。將更改ip的值為指定暫存器中的值

可以根據需要將一組記憶體單元定義為一段。

將長度為n(n<= 64kb)的一組**存在一組連續的,起始位置為16的倍數的記憶體單元中。我們認為這一段是用來存放**的,也就是定義了乙個**段。

使用cs,ip來是cpu執行**段.

檢視,修改cpu中暫存器的內容:r命令

檢視記憶體中的內容: d命令

修改記憶體中的內容:e命令(記憶體中,指令資料沒有區別)

將記憶體中的內容解釋為機器指令和對應的彙編指令:u命令

執行cs:ip指向指令:t命令

以彙編形式向記憶體寫入指令:a命令

來自為知筆記(wiz)

組合語言 暫存器

乙個典型的cpu由運算器 控制器 暫存器等器件組成,這些器件靠內部匯流排相連。通用暫存器 ax bx cx dx 段位址暫存器 cs ds es ss 專用暫存器 bp sp si di 指令指標暫存器 ip 標誌暫存器 psw ah al ax accumulator 累加暫存器 bh bl bx...

組合語言 暫存器

乙個cpu由暫存器,運算器,控制器組成,暫存器負責儲存資料。通用暫存器 ax,bx,cx,dx。8086cpu的暫存器都是16位的,能存放兩個位元組。乙個暫存器又能分為兩個部分,乙個高位位元組如ah,還有乙個地位位元組如al。這兩個部分可以單獨看成乙個八位暫存器來用。當暫存器當整體來看時,它可以進行...

組合語言 暫存器

ax,bx,cx,dx 這4個暫存器通常用來存放一般性的資料,被稱為通用暫存器。8086cpu這5個暫存器都可以分為兩個可以獨立使用的8位暫存器來用 ax的低8位 0 7 構成al暫存器,高8位 8 15 構成了ah暫存器。ah和al暫存器是可以獨立使用的8位暫存器。考慮相容性8086cpu可以一次...