8086 所有的寄存器都是16位的,可以存放两个字节
通用寄存器
AX 可分为 AH和AL
BX 可分为 BH和BL
CX 可分为 CH和CL
DX 可分为 DH和DL
可以作为两个独立使用的8位寄存器来用 AX的低8位构成AL寄存器,高8位构成AH寄存器 在写一条汇编指令或者一个寄存器的名称时不用区分大小写
这4个寄存器用来存放一般性的数据,被称为通用寄存器
段寄存器
CS DS SS ES
CS和IP是8086CPU 中最关键的寄存器,CS为代码段寄存器,IP为指令指针寄存器,任意时刻,CPU将CS:IP指向的内容当作指令执行。执行过程如下:
1 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器。
2 (IP) = (IP) + 所读取的指令长度,从而指向下一条指令
3 执行指令,转到1,重复。
如果内存中的一段信息曾被CPU执行过,那么它所在的内存单元一定被CS:IP指向过
修改CS,IP内容:
JMP 2AE3:3
执行后 CS=2AE3,IP=0003H
CPU将从2AE33H处读取指令
寻址方式
段地址×16 + 偏移地址 = 物理地址
(段地址×16)显然是16的倍数,所以一个段的起始地址也一定是16的倍数,寻址能力为64KB,所以一个段的长度最大为64KB80
字单元:存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。
CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址(由段地址和偏移地址组成) 8086CPU自动读取DS中的数据作为内存单元的段地址
例如 将AL中的数据送入内存单元10000H中
MOV BX,10000H
MOV DS,BX
MOV [0],AL
ADD 寄存器,寄存器
ADD 寄存器,数据
ADD 寄存器,内存单元
ADD 内存,寄存器
栈操作 PUSH POP
在8086的CPU中,又两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中,任意时刻,SS:SP指向栈顶元素
我们可以将一段长度为N(N<=64KB)地址连续,起始地址为16的倍数的内存单元当作专门存放数据的内存空间,从而定义了一个数据段