汇编语言-寄存器

2.1 通用寄存器

AX, BX, CX, DX 这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。8086CPU这5个寄存器都可以分为两个可以独立使用的8位寄存器来用:
  • AX可分为AHAL;
  • BX可分为BHBL;
  • CX可分为CHCL;
  • DX可分为DHDL;

AX的低8位(0 - 7)构成AL寄存器,高8位(8 - 15)构成了AH寄存器。AHAL寄存器是可以独立使用的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位2^4^ = 16。4位2进制等于一位16进制所以16进制向左移一位。
  • 段地址×16必然是16的倍数,所以一个段的起始地址也是16的倍数;偏移地址位16位,16位地址的寻址能力为64kb,所以一个段的最大为64kb。
  • 64kb = 2^16^ / 1024; 2^16^ = 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。

猜你喜欢

转载自www.cnblogs.com/chengmf/p/12454649.html