8086x8088寄存器结构
文章目录
8086x8088寄存器结构
8086CPU内部具有14个16位寄存器,用于提供运算,控制指令执行,和对指令及操作数寻址。
通用寄存器组
8个16位通用寄存器分为两组:数据寄存器即地址指针和变址寄存器
数据寄存器
- 数据寄存器包括AX,BX,CX,DX.
- 在指令执行过程中既可用来寄存操作数,也可用来寄存操作的结果。
- 每一个又可将高八位和低八位分成独立的两个8位寄存器来使用
- 16位数据寄存器主要用于存放数据,也可用来存放地址
- 8位寄存器(AL,AH,BL,BH,CL,CH,DL,DH)只能用于存放数据
指针寄存器和变址寄存器
- 包括SP,BP,SI,DI
- 在对存储器操作数寻址时用于形成20位物理地址码的组成部分
- 在任何情况下不能独立地形成访问内存的地址码,因为它们都只有16位
- 访问存储器的地址码由段地址(存放在段寄存器中)和段内偏移地址两部分组成
- 这四个寄存器用于存放段内偏移地址的部分或全部
SP(Stack Pointer)堆栈指针
- 用于存放堆栈操作(Push\Pop)地址的段内偏移地址
- 其段地址由段寄存器SS(Stack Segment)提供
BP(Base Pointer)基址指针
- 在部分间接寻址方式中用于用于存放段内偏移地址的一部分
- 含有BP的寻址方式中如果无特殊说明均由段寄存器SS提供
- 该寻址方式依然是对堆栈区的存储单元寻址
SI(Source Index),DI(Destination Index)变址寄存器
- 在某些间接寻址方式中,SI和DI用来存放段内偏移地址的全部或一部分
- 在字符串操作指令中,SI做源变址寄存器,DI做目的变址寄存器
- 这组寄存器主要用来存放地址
- 也可以存放数据
小结
- 以上8个16位通用寄存器在一般情况下都具有通用性
- 提高了指令系统的灵活性
- 通用寄存器各自具有特定的用法
- 有些指令中隐含的使用这些寄存器
段寄存器组
- 访问存储器的地址码由段地址和段内偏移地址两部分组成
- 段寄存器用于存放段地址
- 总线接口单元BIU设置四个段寄存器
- CPU可通过4个段寄存器访问存储器中4个不同的段
- 每段2^16=64KB
- 四个段寄存器:CS,DS,SS,ES
代码段寄存器
- CS(Code Segment)
- 存放当前执行程序所在段的地址
- CS内容左移四位再加上指令指针IP的内容就是下一条要执行的指令地址
数据段寄存器
- DS(Data Segment)
- 存放当前堆栈段的地址
- 堆栈是存储器中开辟的按先进后出的原则组织的一个特别存储区
- 堆栈主要用于调用子程序时,保留范围主程序的地址和保存进入子程序要改变其值的寄存器的内容
- 对堆栈进行操作(压入/弹出)的地址由SS的内容左移加上SP的内容得到
附加段寄存器
- ES(Extra Segment)
- 附加段是一个附加数据段
- 附加段是在进行字符串操作时作为目的区地址使用的,ES存放附加段的段地址,DI存放目的区偏移地址
小结
- DS和ES都要由用户程序设置初值
- 若DS和ES的初值相同,则数据段和附加段重合
控制寄存器组
指令指针
- IP(Instruction Pointer)
- 指令指针IP保存下一条要执行指令的偏移地址
- 在用户程序中不能使用该寄存器
- 但可以用调试程序DEBUG中的命令改变其值以改变程序执行地址,用于调试程序
- 某些指令如转移指令、过程调用指令和返回指令等将改变IP的内容
标志寄存器
- FLAG
- 即处理状态字(PSW)寄存器
- 8086/8088 CPU设计了一个两字节的标志寄存器
- 共9个标志
- 6个反映前一次涉及ALU操作结果的状态标志
- 3个控制CPU操作特征的控制标志
状态标志
进位标志
- CF(Carry Flag)
- 加法时最高位产生进位时等于1,否则等于0
- 减法时最高位产生错位时等于1,否则等于0
- 对字节操作最高位是D7
- 对字操作最高位是D15
奇偶标志
- PF(Parity Flag)
- 如果操作结果低八位中含有偶数个1则等于1,否则等于0
辅助进位标志
- AF(Auxiliary Carry Flag)
- 加法时D3有进位则为1,否则为0
- 减法时D3有错位则为1,否则为0
- 该标志位用于实现BCD码算数运算结果的调整
零标志
- ZF(Zero Flag)
- 如果运算结果各位都是0,则等于1,否则等于0
符号标志
- SF(sign Flag)
- 总是和运算结果的最高位相同
- 字节操作最高位是D7
- 字操作最高位是D15
- 在补码运算时最高位时符号位,所以结果为负时SF=1,反之为0
溢出标志
- OF(Over Flow)
- 当运算结果超出了带符号数所能表示的数值范围即溢出
- 溢出时OF=1,否则为0
- 用来判断带符号数运算结果是否溢出
- 对于加运算次高位进位而最高位没有进位则溢出
- 对于加运算最高位进位和次高位没有进位则溢出
- 对于减运算次高位不需要借位但是最高位却需要借位则产生溢出
- 对于减运算次高位需要借位但最高位不需要借位则溢出
控制标志
方向标志
- DF(Direction Flag)
- 可用指令预置
- 字符串操作指令执行时受它的控制
- DF=0执行串操作指令,变址寄存器地址自动递增
- DF=1时变址寄存器地址自动递减
- 该标志位可控制地址向着增大的方向或减小的方向改变
中断允许标志
- IF(Interrupt Enable Flag)
- 可用指令预置
- 当IF=1,CPU可相应可屏蔽中断请求
- IF=0,CPU不响应可屏蔽中断请求
陷阱标志
- TF(Trap Flag)
- 若TF=1,则CPU处于单步执行指令工作方式
- 每执行一条指令就自动产生一次类型1的内部中断
- IBMPC系统中,用系统调试程序DEBUG时,T命令就是利用这种中断
- 服务子程序的功能是显示所有寄存器的当前值和将要执行的下一条指令