什么是寄存器?
寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。8086CPU有14个寄存器。
8086的寄存器组分为8个通用寄存器,4个段寄存器、1个标志寄存器和1个指令指针寄存器,他们均为16位。
通用寄存器(可以分成高8位和低8位两个独立的寄存器,例如AH与AL):
- AX、BX、CX、DX(数据寄存器)
- SI、DI(变址寄存器)
- SP、BP(指针寄存器)
段寄存器:
- CS、DS、SS、ES
标志寄存器:FLAG
指令指针寄存器:IP
8086CPU给出物理地址的方法
16位的8086CPU有20位的地址总线,所以采用在内部用2个16位地址合成的方法来形成一个20位的物理地址。
物理地址 = 段地址*16 + 偏移地址
注: 段地址*16就是16位段地址左移一位。
段寄存器
存储器分段,每个段不超过64K个字节。段寄存器用来保存段地址。8086CPU设定了4个16位段寄存器:CS代码段寄存器、DS数据段寄存器、SS堆栈段寄存器、ES附加段寄存器。
DS寄存器
寄存器DS通常用来存放要访问数据的段地址。注意,不能使用mov指令直接将数据移入段寄存器中,例如:
MOV DS,1000H
正确的指令应该是用一个寄存器进行中转:
MOV BX,1000H
MOV DS,BX
字的传送
一个字等于两个字节。 存储一个字或双字,8086采用“小端方式”,即:低地址存放低位字节、高地址存放高位字节。
CPU提供的栈机制
8086CPU中,寄存器SS和SP分别用于存放栈顶的段地址和偏移地址。当栈空时,SS:SP指向栈空间最高地址单元的下一个单元。