8086CPU有14个寄存器

通用寄存器:AX、BX、CX、DX
变址寄存器:SI、DI
指针寄存器:SP、BP
指令指针寄存器:IP
段寄存器:CS、SS、DS、ES
标志寄存器:PSW
共性:8086CPU所有寄存器都是16位的,可以存放两个字节
image.png

通用寄存器结构(AX)

一个16位寄存器保存数据的最大值:2^16-1(FFFF)

思考:

8086上一代CPU寄存器是8位的,如何保证程序的兼容性

方案:

通用寄存器可以分为两个独立的8位寄存器使用
AX寄存器裂开分为AH和AL,AH表示AX的高8位,AL表示AX的第8位
同样,BX可以分为BH和BL,CX可以分为CH和CL……

“字”在寄存器中的存储

8086是16位CPU
8086的字长(word size)为16bit
多少位CPU,它的字长就是多少bit
一个字可以存在一个16位寄存器中
这个字的高位字节存在这个寄存器的高8位寄存器
这个字的低位字节存在这个寄存器的低8位寄存器

确定物理地址的方法

  • CPU访问内存单元时要给出内存单元的地址。
  • 所有的内存单元构成的存储空间是一个一维的线性空间
  • 没有给内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址

    事实

  • 8086有20位的地址总线,可传送20位地址,寻址能力为1M。

  • 8086是16位结构的CPU
    • 运算器一次最多处理16位的数据,寄存器的最大宽度为16位,寻址能力也只有64KB

      思考

      8086如何处理在寻址空间上的这个矛盾

      方案

      8086的解决方法:
      用两个16位的地址(段地址、偏移地址)合成一个20位的物理地址
      地址加法器合成物理地址的方法:
      物理地址=段地址*16+偏移地址

用分段的方式管理CPU

8086CPU用 段地址*16+偏移地址=物理地址 的方式给出内存单元的物理地址。
内存的逻辑地址是连续的线性的,内存并没有分段,段的划分来自CPU。

存储单元地址的表示方法

例:数据在21F60H内存单元中,段地址是2000H,说法
数据存在内存2000:1F60单元中
数据存在内存的2000H段中的1F60H单元中。

段地址寄存器——用专门的寄存器存放段地址

CS:代码段寄存器
DS:数据段寄存器
SS:栈段寄存器
ES:附加段寄存器

偏移地址寄存器

IP:记录偏移地址