第二章 寄存器(CPU工作原理)
CPU概述
???? CPU由運算器、控制器、寄存器等器件組成,這些器件靠內部總線相連。
???? 內部總線實現CPU內部各個器件之間的聯系。
???? 外部總線實現CPU和主板上其他器件的聯系。
?
寄存器概述
???? 8086CPU有14個寄存器:
AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
?
2.1通用寄存器
???? 8086CPU所有的寄存器都是16位的,可以存放兩個字節。
???? 通用寄存器:AX、BX、CX、DX通常用來存放一般性數據。
????
以AX為例,寄存器的邏輯結構:
???????? 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
???????? 16位數據在寄存器中的存放情況
????????????? 數據:18
????????????? 二進制表示:10010
????????????? 在寄存器AX中的存儲:
????????????? 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0(AX)
0?????? 0? 0? 0? 0? 0 0 0 0 0 0 1 0 0 1 0
一個16位的寄存器所能存儲的數據的最大值為2^16-1
一個8位的寄存器所能存儲的數據的最大值為2^8-1
?
為了保證兼容性,四個通用寄存器都可以分為兩個獨立的8位寄存器使用。
???? AX=AH(高8位(8~15位))+AL(低8位(0~7位));
???? BX=BH+BL;
???? CX=CH+CL;
???? DX=DH+DL;
????
2.2字在寄存器中的存儲
一個字可存放在一個十六位的寄存器中,這個寄存器的高位字節和低位字節就存在這個寄存器的高八位寄存器和第八位寄存器中。
?
【關于數制的討論】P16
2.3幾條匯編指令(匯編指令不區分大小寫)
123456789ABCDEFG
MOV AX,BX
add ax,bx
?
2.4物理地址
物理地址:CPU訪問內存單元時要給出內存單元的地址。所有的內存單元構成的存儲空間是一個一維的線性空間。
?
2.5 16位結構的CPU
16位結構描述了一個CPU具有以下幾個方面的特征:
1,????? 運算器一次最多可以處理16位的數據;
2,????? 寄存器的最大寬度為16位;
3,????? 寄存器和運算器之間的通路是16位的;
?
2.6 8086CPU給出物理地址的方法
8086內部有20位地址總線,可傳送20位地址,尋址能力為1M(2^20=1MB)。8086內部為16位結構,他只能傳送16位的地址,表現出的尋址能力為64K。8086CPU采用一種在內部用兩個16位地址合成的方法來形成一個20位的物理地址。
?
8086CPU讀寫內存:
1,????? CPU中的相關部件提供兩個十六位地址,一個稱為段地址,另一個稱為偏移地址;
2,????? 段地址和偏移地址通過內部總線送入一個稱為地址加法器的部件;
3,????? 地址加法器將兩個16位地址合并成一個20 位的地址;
4,????? 再通過20位地址總線傳送到存儲器中。
?
2.7 “物理地址=段地址*16+偏移地址”的本質含義
地址加法器合成物理地址的方法:物理地址=段地址*16+偏移地址;
段地址*16——》左移四位(二進制)
一個數據的X進制形式左移一位,相當于乘以X
?
2.8 段的概念
段的劃分來自于CPU,由于8086CPU采用(物理地址=段地址*16+偏移地址)的方式給出內存單元的物理地址,使得我們可以用分段的方式來管理內存。在編程時可以根據需要,將若干地址連續的內存單元看作一個段,用段地址*16定位段的起始地址(基礎地址),用偏移地址定位段中的內存單元。
注意:1,段地址*16必然是16的倍數,所以一個段的起始地址也一定是16的倍數;
2,偏移地址為16位,16位地址的尋址能力為64K,所以一個段的最大長度為64K;
?
小結:
CPU訪問內存單元時,必須向內存提供內存單元的物理地址。
8086CPU在內部用段地址和偏移地址移位相加的方法形成最終的物理地址。
?
思考:
CPU可以用不同的段地址和偏移地址形成同一個物理地址。
偏移地址16位,變化范圍為0~FFFFH,僅用偏移地址來尋址最多可以尋64K個內存單元。
?
“數據在21F60H內存單元中”8086CPU機的兩種描述:
1. 數據存在內存2000:1F60單元中;
2. 數據存在內存的2000段中的1F60H單元中;
?
2.9段寄存器
段寄存器就是提供段地址的,8086CPU有4個段寄存器:
CS、DS、SS、ES。當8086要訪問內存時,由這4個段寄存器提供內存單元的段地址。
2.10CS和IP
CS和IP是8086CPU中最關鍵的寄存器,它們指示了CPU當前要讀取指令的地址。CS為代碼段寄存器IP為指令指針寄存器。
?
2.11修改CS,IP的指令
轉移指令:
???? 同時修改CS,IP的內容:
???? Jmp 段地址:偏移地址
???????? Jmp 2AE3:3
???????? Jmp 3:0B16
功能:用指令中給出的段地址修改CS,偏移地址修改IP。
???? 修改IP的內容:
???? Jmp 某一合法寄存器
???????? Jmp ax (類似于mov IP,ax)
???????? Jmp bx
功能:用寄存器中的值修改IP。
?
2.12代碼段
????
2.9-2.12小結:
1.段地址在8086CPU的寄存器中存放。當8086CPU要訪問內存時,由段寄存器提供內存單元的段地址。8686CPU有4個段寄存器,其中CS用來存放指令的段地址。
2.CS存放指令的段地址,IP存放指令的偏移地址。
8086機中。任意時刻,CPU將CS:IP指向的內容當作指令執行。
3.8086 CPU在工作的過程中:
(1)從CS:IP指向內存單元讀取指令,讀取的指令進入指令緩沖器;
(2)IP指向下一條指令;
(3)執行指令(跳轉到(1),重復這一過程。)
4.8086 CPU提供轉移指令修改CS,IP的內容。