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