天天看點

彙編語言-寄存器

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工作流程

  1. 從CS:IP指向的記憶體單元讀取指令,讀取的指令進入指令緩沖器;
  2. IP = IP + 所讀取指令的長度,進而指向下一條指令;
  3. 執行指令。轉到步驟(1)重複這個過程。

2.6 修改 CS, IP 的指令

jmp 段位址:偏移位址 指令的功能為:用指令中給出的段位址修改CS, 偏移位址修改IP。

如:

  • jmp 2AE3:3, 執行後:CS = 2AE3,IP = 0003H, CPU将從2AE33H處讀取指令。
  • jmp ax, 在含義上好像似:mov IP,ax。

繼續閱讀