寄存器
寄存器是CPU中程序員可以用指令讀寫的部件,通過改變寄存器中的內容實現對CPU的控制。
2.1 通用寄存器
8086CPU的所有寄存器都是16位的,可以存放兩個字節。AX、BX、CX、DX這4個寄存器通常用來存放一般性的數據,被稱為通用寄存器。8086CPU的上一代CPU中的寄存器都是8位的,為了保證兼容,8086CPU的AX、BX、CX、DX這4個寄存器都可分為兩個可獨立使用的8位寄存器來用:
- AX可分為AH和AL;
- BX可分為BH和BL;
- CX可分為CH和CL;
- DX可分為DH和DL。
2.2 字在寄存器中的存儲
8086CPU可以一次性處理以下兩種尺寸的數據。
2.3 幾條匯編指令
- 匯編指令不區分大小寫。
- 在進行數據傳送或運算時,要注意指令的兩個操作對象的位數應當是一致的。
2.4 物理地址
所有的內存單元構成的存儲空間是一個一維的線性空間,每一個內存單元在這個空間中都有唯一的地址,我們將這個唯一的地址稱為物理地址。CPU通過地址總線送入存儲器的,必須是一個內存單元的物理地址。
2.5 16位結構的CPU
16位結構(16位機、字長為16位等常見說法,與16位結構的含義相同)描述了一個CPU具有下面幾方面的結構特性。
- 運算器一次最多可以處理16位的數據;
- 寄存器的最大寬度為16位;
- 寄存器和運算器之間的通路為16位。
2.6 8086CPU給出物理地址的方法
8086CPU采用一種在內部用兩個16位地址合成的方法來形成一個20位(地址總線)的物理地址。當8086CPU要讀寫內存時:
- CPU中的相關部件提供兩個16位的地址,一個稱為段地址,另一個稱為偏移地址;
- 段地址和偏移地址通過內部總線送入一個稱為地址加法器的部件;
- 地址加法器將兩個16位地址合成為一個20位的物理地址;
- 地址加法器通過內部總線將20位物理地址送入輸入輸出控制電路;
- 輸入輸出控制電路將20位物理地址送上地址總線;
- 20位物理地址被地址總線傳送到存儲器。
地址加法器采用物理地址=段地址×16+偏移地址的方法用段地址和偏移地址合成物理地址。
2.7 “段地址×16+偏移地址”的本質含義
“段地址×16+偏移地址=物理地址”的本質含義是:CPU在訪問內存時,用一個 基礎地址 (段地址×16)和一個相對于基礎地址的偏移地址相加,給出內存單元的物理地址。
2.8 段的概念
內存并沒有分段, 段的劃分來自于CPU ,由于8086CPU用“基礎地址(段地址×16)+偏移地址=物理地址”的方式給出內存單元的物理地址,使得我們可以用分段的方式來管理內存。
有兩點需要注意:段地址×16必然是16的倍數,所以一個段的起始地址也一定是16的倍數;偏移地址為16位(寄存器位數),16位地址的尋址能力為64KB,所以一個段的長度最大為64KB。
“數據在21F60H內存單元中。”這句話對于8086PC機一般不這樣講;而是如下說法:
- 數據存在內存20001F60單元中;
- 數據存在內存的2000H段中的1F60H單元中。
2.9 段寄存器
段地址在8086CPU的段寄存器中存放。8086CPU有4個段寄存器:CS、DS、SS、ES。當8086CPU要訪問內存時由這4個段寄存器提供內存單元的段地址。
2.10 CS和IP
CS和IP是8086CPU中兩個最關鍵的寄存器,它們指示了 CPU當前要讀取指令的地址 。
- CS為代碼段寄存器;
- IP為指令指針寄存器。
任意時刻,CPU將CS:IP指向的內容當作指令執行。具體的工作過程:
- 從CS:IP指向的內存單元讀取指令,讀取的指令進入指令緩沖器;
- IP:=IP+所讀取指令的長度,從而指向下一條指令;
- 執行指令。轉到步驟1,重復這個過程。
在8086CPU加電啟動或復位后(即CPU剛開始工作時)CS和IP被設置為CS= FFFFH,IP=0000H,即在8086PC機剛啟動時,CPU從內存 FFFF0H單元中讀取指令執行,FFFF0H單元中的指令是8086PC機開機后執行的第一條指令。
2.11 修改CS、IP的指令
在CPU中,程序員能夠用指令讀寫的部件只有寄存器,程序員可以通過改變寄存器中的內容實現對CPU的控制。
能夠改變CS、IP的內容的指令被統稱為 轉移指令 。若想同時修改CS、PP的內容,可用形如“jmp段地址:偏移地址”的指令完成。
jmp 2AE3:3 #執行后:CS=2AE3H,IP=0003H,CPU將從2AE33H處讀取指令。
jmp 3:0B16 #執行后:CS=0003H,IP=0B16H,CPU將從00B46H處讀取指令。
若想僅修改IP的內容,可用形如“jmp某一合法寄存器”的指令完成。
jmp ax, #指令執行前:ax=1000H,CS=2000H,IP=000H
#指令執行后:ax=1000H,CS=2000H,IP=1000H
jmp bx, #指令執行前:bx=0B16H,CS=2000H,IP=0003H
#指令執行后:bx=0B16H,CS=2000H,IP=0B16H
-
控制器
+關注
關注
112文章
16214瀏覽量
177479 -
寄存器
+關注
關注
31文章
5325瀏覽量
120052 -
存儲器
+關注
關注
38文章
7455瀏覽量
163623 -
PC機
+關注
關注
2文章
201瀏覽量
28556 -
加法器
+關注
關注
6文章
183瀏覽量
30093
發布評論請先 登錄
相關推薦
評論