?一個典型的 CPU 由運算器、控制器、寄存器等器件組成,不同 CPU 寄存器的個數(shù)和結(jié)構(gòu)都是不相同的,8086 CPU 有 14 個寄存器,這些寄存器分別是:AX BX CX DX SI DI SP BP IP CS SS DS ES PSW。
1、通用寄存器
8086 CPU 所有寄存器都是 16 位的,可以存放兩個字節(jié)。AX BX CX DX 這四個寄存器通常用來存放一般性數(shù)據(jù),稱為通用寄存器。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 位結(jié)構(gòu),在內(nèi)部一次性處理、傳輸、暫時存儲的地址為 16 位。所以 8086 CPU 采用一種在內(nèi)部用兩個 16 位地址合成的方法來形成一個 20 位的物理地址

1. CPU 的相關(guān)部件提供兩個 16 位的地址,一個稱為段地址,另一個稱為偏移地址;
2. 段地址和偏移地址被送入到一個稱為地址加法器的部件合成一個 20 位的物理地址;
3. 地址加法器通過內(nèi)部總線將 20 位物理地址送入輸入輸出控制電路;
4. 然后通過地址總線傳送到存儲器;
物理加法器采用 物理地址 = 段地址 * 16 + 偏移地址 的方法用段地址和偏移地址合成物理地址。
例:段地址 = 1230,偏移地址 = A5123A5 = 1230 * 16 + A5 所以計算得出物理地址為 123A5。
3、段寄存器
8086 CPU 有四個段寄存器:CS DS SS ES。
CS :代碼段
DS :數(shù)據(jù)段
SS :堆棧段
ES :拓展段
CS 和 IP 是 8086 CPU 中兩個最關(guān)鍵的寄存器,他們指示了 CPU 當(dāng)前要讀取指令的地址,CS 為代碼段寄存器,IP 為指令指針寄存器。在 8086 PC 機中,任意時刻,CPU 將 CS:IP 指向的內(nèi)容當(dāng)做指令執(zhí)行。8086 CPU 工作過程簡單簡述如下
1. 從 CS:IP 指向的內(nèi)存單元讀取指令,讀取的指令進入指令緩沖器;
2. IP = IP + 所讀指令長度,從而指向下一條指令;
3. 執(zhí)行指令,轉(zhuǎn)到步驟 1 ,一直重復(fù)直到退出為止。
在 8086 CPU 加電啟動或復(fù)位后 CS 和 IP 被設(shè)置為 CS = FFFFH,IP = 0000H,即 8086 PC 機啟動時執(zhí)行的第一條指令是 FFFF0。如果內(nèi)存中的一段信息曾被 CPU 執(zhí)行過,那么它所在的內(nèi)存單元必定被 CS:IP 指向過。CPU 從何處執(zhí)行指令是由 CS:IP 決定的,所以我們可以通過修改 CS:IP 中的內(nèi)容來控制 CPU 目標(biāo)指令。
傳送指令 MOV 大部分寄存器的值,但是不能用于設(shè)置 CS:IP 的值,因為8086 CPU 沒有提供這樣的功能,能夠改變 CS:IP 的指令被統(tǒng)稱為轉(zhuǎn)移指令,如 JMP 指令。
例:
同時修改 CS 和 IP 的值,指令格式:JMP 短地址:偏移地址
jmp 2B5A:6,執(zhí)行后 CS = 2B5AH,IP = 0006H,CPU 將從 2B5A6H 處讀取指令。
只修改 IP 的值 指令格式:jmp 某一合法寄存器
JMP AX,執(zhí)行前:AX = 1000H,CS = 2000H,IP = 0002H
執(zhí)行后:AX = 1000H,CS = 2000H,IP = 1000H
?