?一個典型的 CPU
由運算器、控制器、寄存器等器件組成,不同 CPU
寄存器的個數和結構都是不相同的,8086
CPU
有 14
個寄存器,這些寄存器分別是:AX
BX
CX
DX
SI
DI
SP
BP
IP
CS
SS
DS
ES
PSW
。
1、通用寄存器
8086
CPU
所有寄存器都是 16
位的,可以存放兩個字節。AX
BX
CX
DX
這四個寄存器通常用來存放一般性數據,稱為通用寄存器。8086
CPU
的上一代 CPU
中的寄存器是 8
位的,為保證兼容,使原來基于上一代 CPU
編寫的程序稍加修改就可以運行在 8086
上,8086
CPU
的 AX
BX
CX
DX
這四個寄存器都可分為兩個獨立使用的 8
位寄存器來用:
AX
可分為
AH
和
AL
BX
可分為
BH
和
BL
CX
可分為
CH
和
CL
DX
可分為
DH
和
DL
2、8086
CPU
物理地址
8086
CPU
有20位地址總線,可以傳送20位地址,達到 1 M
尋址能力,8086
CPU
又是 16
位結構,在內部一次性處理、傳輸、暫時存儲的地址為 16
位。所以 8086
CPU
采用一種在內部用兩個 16
位地址合成的方法來形成一個 20
位的物理地址
1. CPU 的相關部件提供兩個 16 位的地址,一個稱為段地址,另一個稱為偏移地址;
2. 段地址和偏移地址被送入到一個稱為地址加法器的部件合成一個 20 位的物理地址;
3. 地址加法器通過內部總線將 20 位物理地址送入輸入輸出控制電路;
4. 然后通過地址總線傳送到存儲器;
物理加法器采用 物理地址 = 段地址 * 16 + 偏移地址
的方法用段地址和偏移地址合成物理地址。
例:段地址 = 1230
,偏移地址 = A5
123A5
= 1230
* 16
+ A5
所以計算得出物理地址為 123A5
。
3、段寄存器
8086
CPU
有四個段寄存器:CS
DS
SS
ES
。
CS :代碼段
DS :數據段
SS :堆棧段
ES :拓展段
CS
和 IP
是 8086
CPU
中兩個最關鍵的寄存器,他們指示了 CPU
當前要讀取指令的地址,CS
為代碼段寄存器,IP
為指令指針寄存器。在 8086
PC
機中,任意時刻,CPU
將 CS:IP
指向的內容當做指令執行。8086
CPU
工作過程簡單簡述如下
1. 從 CS:IP 指向的內存單元讀取指令,讀取的指令進入指令緩沖器;
2. IP = IP + 所讀指令長度,從而指向下一條指令;
3. 執行指令,轉到步驟 1 ,一直重復直到退出為止。
在 8086
CPU
加電啟動或復位后 CS
和 IP
被設置為 CS = FFFFH
,IP = 0000H
,即 8086
PC
機啟動時執行的第一條指令是 FFFF0
。如果內存中的一段信息曾被 CPU
執行過,那么它所在的內存單元必定被 CS:IP
指向過。CPU
從何處執行指令是由 CS:IP
決定的,所以我們可以通過修改 CS:IP
中的內容來控制 CPU
目標指令。
傳送指令 MOV
大部分寄存器的值,但是不能用于設置 CS:IP
的值,因為8086
CPU
沒有提供這樣的功能,能夠改變 CS:IP
的指令被統稱為轉移指令,如 JMP
指令。
例:
同時修改 CS 和 IP 的值,指令格式:JMP 短地址:偏移地址
jmp 2B5A:6,執行后 CS = 2B5AH,IP = 0006H,CPU 將從 2B5A6H 處讀取指令。
只修改 IP 的值 指令格式:jmp 某一合法寄存器
JMP AX,執行前:AX = 1000H,CS = 2000H,IP = 0002H
執行后:AX = 1000H,CS = 2000H,IP = 1000H
?