2.1 通用寄存器
AX, BX, CX, DX 這4個寄存器通常用來存放一般性的資料,被稱為通用寄存器。8086CPU這5個寄存器都可以分為兩個可以獨立使用的8位寄存器來用:
- AX可分為AH和AL;
- BX可分為BH和BL;
- CX可分為CH和CL;
- DX可分為DH和DL;
AX的低8位(0 - 7)構成AL寄存器,高8位(8 - 15)構成了AH寄存器。AH和AL寄存器是可以獨立使用的8位寄存器。
2.2 字在寄存器中的存儲
考慮相容性8086CPU可以一次性處理一下兩種尺寸的資料。
- 位元組:記為byte,一個位元組由8個bit組成,可以存在8位寄存器中。
- 字:記為word,一個字由倆個位元組組成,這兩個位元組分别稱為這個字的高位位元組和低位位元組。
2.3 幾條彙編指令
彙編指令 | 控制CPU完成的操作 | 用進階語言表述 |
---|---|---|
MOV ax,18 | 将18送入寄存器ax | ax = 18 |
ADD ax,8 | 将寄存器ax中的數值加上8 | ah = ax + 8 |
注意指令的兩個操作對象的位數應當是一緻的。 | ||
例:ax為16位寄存器,隻能放4位16進制位數,是以多餘的高位會丢失。 |
2.4 實體位址
CPU通路記憶體單元時,要給出記憶體單元的位址。所有記憶體單元構成的存儲空間時一個一維的線性空間,每一個記憶體單元在這個空間中都有唯一的位址,我們将這個唯一的位址稱為實體位址。
CPU通過位址總線送入存儲器,必須是一個記憶體單元的實體位址。在CPU向位址總線上發出實體位址之前,必須要在内部先形成這個實體位址。不同的CPU可以有不同的形成實體位址的方式。
實體位址 = 段位址 × 16 + 偏移位址
- 段位址×16 就是左移4位24 = 16。4位2進制等于一位16進制是以16進制向左移一位。
- 段位址×16必然是16的倍數,是以一個段的起始位址也是16的倍數;偏移位址位16位,16位位址的尋址能力為64kb,是以一個段的最大為64kb。
- 64kb = 216 / 1024; 216 = 65536 byte;
2.5 段寄存器
8086CPU有4個段寄存器:CS, DS, SS, ES。通路記憶體時由這4個段寄存器提供記憶體單元的段位址。
- CS:代碼段寄存器
- IP:指令指針寄存器
8086CPU工作流程
- 從CS:IP指向的記憶體單元讀取指令,讀取的指令進入指令緩沖器;
- IP = IP + 所讀取指令的長度,進而指向下一條指令;
- 執行指令。轉到步驟(1)重複這個過程。
2.6 修改 CS, IP 的指令
jmp 段位址:偏移位址 指令的功能為:用指令中給出的段位址修改CS, 偏移位址修改IP。
如:
- jmp 2AE3:3, 執行後:CS = 2AE3,IP = 0003H, CPU将從2AE33H處讀取指令。
- jmp ax, 在含義上好像似:mov IP,ax。