前言
8086 CPU 有 14 個寄存器,每個寄存器有一個名稱。這些寄存器是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW
一、通用寄存器
8086 CPU 的所有寄存器都是 16 位的,可以存放兩個字節。AX、BX、CX、DX 這 4個寄存器通常用來存放一般性的數據,被稱為通用寄存器。
8086 CPU 的上一代 CPU 中的寄存器都是 8 位的。
為了保證兼容,使原來基于上代 CPU 編寫的程序稍加修改就可以運行在 8086 之上,8086 CPU 的 AX、BX、CX、DX 這 4個寄存器都可分為兩個可獨立使用的8位寄存器來用:
????????1. AX 可分為 AH 和 AL;
????????2. BX 可分為 BH 和 BL;.
????????3. CX 可分為 CH 和 CL;
????????4. DX 可分為 DH 和 DL。?
AX 的低 8 位(0 位~7 位) 構成了 AL 寄存器,高 8位(8 位~15 位) 構成了 AH 寄存器。AH 和 AL 寄存器是可以獨立使用的 8 位寄存器。?
二、字在寄存器中的存儲?
出于對兼容性的考慮,8086 CPU 可以一次性處理以下兩種尺寸的數據。
字節:記為 byte,一個字節由8個bit組成,可以存在8位寄存器中。
字:記為 word,一個字由兩個字節組成,這兩個字節分別稱為這個字的高位字節和低位字節。
三、匯編指令
書中案例分析,請計算最后 ax 寄存器的值?
程序段中的最后一條指令 add ax,bx,在執行前 ax 和 bx 中的數據都為 8226H,相加后所得的值為:1044CH,但是 ax為16 位寄存器,只能存放4位十六進制的數據,所以最高位的1不能在 ax 中保存,ax 中的數據為:044CH。?
請計算 al 寄存器的值
程序段中的最后一條指令 add al,93H,在執行前,al 中的數據為 C5H,相加后所得的值為:158H,但是 al 為8位寄存器,只能存放兩位十六進制的數據,所以最高位的1丟失,ax 中的數據為:0058H
這里如果將 al 換成 ax 則結果為 0158 H(注意區分八位和十六位寄存器)
在進行數據傳送或運算時,要注意指令的兩個操作對象的位數應當是一致的,例如:?
mov ax,bx
mov bx,cx
mov ax,18H
mov al,18H
add ax,bx
add ax,20000
答案解析:
四、物理地址
每一個內存單元都有唯一的地址,我們將這個唯一的地址稱為物理地址。?
五、8086 CPU 給出物理地址的方法
8086CPU 采用一種在內部用兩個 16 位地址合成的方法來形成一個 20 位的物理地址
1. CPU 中的相關部件提供兩個 16 位的地址,一個稱為段地址,另一個稱為偏移地址;
2. 段地址和偏移地址通過內部總線送入一個稱為地址加法器的部件:
3.?地址加法器將兩個16 位地址合成為一個20位的物理地址;
4. 地址加法器通過內部總線將20位物理地址送入輸入輸出控制電路;
5. 輸入輸出控制電路將20位物理地址送上地址總線;
6. 20位物理地址被地址總線傳送到存儲器。?
地址加法器采用物理地址=段地址x16+偏移地址的方法用段地址和偏移地址合成物理地址?
六、段
如圖 2.9 所示,我們可以認為:地址10000H~100FFH 的內存單元組成一個段,該段的起始地址(基礎地址)為 10000H,段地址為 1000H,大小為 100H
我們也可以認為地址 10000H~1007FH、10080H~100FFH 的內存單元組成兩個段,它們的起始地址(基礎地址)為:10000H和10080H,段地址為:1000H和1008H,大小都為 80H。
答案解析:從最小為 0H,最大?FFFFH 計算
七、段寄存器
8086 CPU 有4個段寄存器:CS、DS、SS、ES
八、CS 和 IP
CS 和 IP 是 8086 CPU 中兩個最關鍵的寄存器,它們指示了 CPU 當前要讀取指令的地址。CS 為代碼段寄存器,IP 為指令指針寄存器?
8086 機中,任意時刻,CPU 將 CS:IP 指向的內容當作指令執行?
圖 2.10 說明如下:?
????????1. 8086CPU 當前狀態:CS 中的內容為2000H,IP中的內容為0000H;
????????2. 內存 20000H~20009H 單元存放著可執行的機器碼:?
九、修改 CS、IP 指令
mov 指令不能用于設置 CS、IP 的值!!!
若想同時修改 CS、IP 的內容,可用形如“jmp 段地址:偏移地址”的指令完成,例如
jmp 2AE3:3,執行后:CS=2AE3H,IP=0003H,CPU 將從 2AE33H 處讀取指令。
jmp 3:0B16,執行后:CS0003H,IP=0B16H,CPU 將從 00B46H 處讀取指令。??
若想僅修改 IP 的內容,可用形如 “jmp 某一合法寄存器” 的指令完成?
“jmp 某一合法寄存器” 指令的功能為:用寄存器中的值修改 IP?
答案解析:四次,jmp 前后各一次?