通用寄存器

8086CPU所有寄存器都是16位的,可存放2个字节。AX,BX,CX,DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。

为了保证与上一代CPU的寄存器兼容,8086CPU可以将这4个寄存器分为两个可以独立使用的8位寄存器使用。

AX=AH+AL

BX=BH+BL

其他类似。

AX的低8位(0-7)是AL寄存器,高8位(8-15)是AH寄存器。

字在寄存器中的存储

  • 字节:记为byte,由8个bit组成

  • 字:记为word,由两个字节组成

段寄存器

CS和IP

CS和IP指定了CPU当前要读取指令的地址。CS为代码寄存器,IP为指令指针寄存器。
读取一条指令后,IP的值自动增加(增加的值为指令的长度),使CPU可以读取下一条指令。
CPU中,程序员能用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。可以通过改变CS,IP中的内容来控制CPU执行目标指令。

但是,mov指令不能用于设置CS,IP的值。可以通过jmp指令修改CS,IP。
格式:
jmp 段地址:偏移地址

jmp 2AE3:3执行后,CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。

若想仅修改IP的内容,可使用:
jmp 某一合法寄存器
指令完成。
如:jmp ax

DS

DS通常用来存放要访问数据的段地址。

mov al,[0]

这里[]里面的0表示偏移地址,8086CPU自动取DS中的数据为内存单元的段地址。

示例:从10000H中读取数据

mov bx,1000H
mov ds,bx
mov al,[0]

8086CPU不支持将数据从内存单元直接送入DS,所以要通过bx寄存器来进行中转。

SS和SP

8086CPU中,段寄存器SS存放栈顶段地址,寄存器SP存放偏移地址,任意时刻,SS:SP指向栈顶元素。pushpop指令执行时,CPU从SS和SP得到栈顶的地址。