• Intel 8086/8088 CPU 结构与可编程寄存器


    一、8086/8088 CPU 功能结构

    Intel 公司于 1978 年推出了标准 16 位微处理器 8086。由于它的内部、外部数据总线宽度都为 16 位,产品推向市场后,当时 8 位接口芯片出现兼容问题,于是又生产了准 16 位微处理器 8088,将外部数据总线改为 8 位,以解决与外围电路的兼容问题。8086 与 8088 CPU 结构与原理除上述差别外,从软件设计角度几乎没有什么差别。

    Intel 8086/8088 CPU 功能结构如图 4 所示。 CPU 采用指令流水线结构,把访问存储器(含取指令、存取数据操作等)与执行指令分成两个独立单元:总线接口单元 BIU(Bus Interface Unit)和执行单元 EU(Execute Unit)。

    Intel 8086/8088 CPU 功能结构

    图 4 Intel 8086/8088 CPU 功能结构

    执行单元 EU 的功能是从 BIU 的指令队列中取出指令代码,然后执行指令所规定的全部功能。如果在执行指令过程中,需要向存储器或 I/O 端口传送数据,EU 向 BIU 发出访问命令,并提供访问的地址和数据。

    总线接口单元 BIU 负责 CPU 与存储器及 I/O 端口的信息传送。具体功能是根据段寄存器 CS 和指令指针 IP 形成 20 位物理地址,从存储器中取出指令,并暂存在指令队列中,等待 EU 取走执行。如 EU 发出访问存储器或 I/O 端口的命令时,BIU 根据 EU 提供的地址和数据,进入外部总线周期,存取数据。

    由此可知,EU 和 BIU 是既分工又合作的两个独立单元。它们的操作是并行的,分别完成不同的任务,因而大大加快了指令执行速度。

    二、CPU内部寄存器组

    对于汇编语言指令,被操作的数据或运算的中间结果可以放在 CPU 内部的寄存器中,也可以放在存储器(内存)中。尤其是 CPU 内部的寄存器,在指令中使用的频度最大,因为访问寄存器要比访问存储器更快捷,汇编语言程序设计者掌握 CPU 中各寄存器的用途是非常重要的。

    Intel 8086/8088 CPU 内部共有 14 个 16 位寄存器,如图 5 所示。根据其作用可分为通用寄存器、段寄存器、指令指针、标志寄存器等。

    Inter 8086/8088 CPU 内部寄存器

    图 5 Inter 8086/8088 CPU 内部寄存器

    (一)通用寄存器

    通用寄存器共有 8 个,它们的作用是存放参加操作的数据或程序运算的结果,它们的特点是具有良好的通用性。在大多数情况下,这些寄存器可以互换地进行各种操作。例如,在程序的一条指令中把一个数据保存在 BX 中或是其他任意一个通用寄存器中是没有区别的。但有少数指令又规定了某些寄存器具有特定的用法。例如,在循环指令(loop)中,循环次数必须放在 CX 中;两个字节相乘的指令中,其中一个数必须放入 AL 中,而结果积隐含在 AX 中。因此,习惯上把 CX 叫作计数器,把 AX 叫作累加器,这就是每个寄存器用途名称的由来。

    8 个通用寄存器根据使用的情况可分为如下 3 种。

    1. 数据寄存器

    它包含 AX、BX、CX、DX 4 个寄存器,其特点是它们中的每一个,既可作为十六位寄存器来使用,也可作为两个 8 位寄存器单独使用。因此,这 4 个十六位寄存器也可以看成是 8 个独立的八位寄存器 AH、AL、BH、BL、CH、CL、DH、DL,这些寄存器的双重性使得程序很容易处理字节和字信息。

    2. 间接寻址寄存器

    间接寻址寄存器由 2 个基址寄存器 BX、BP 和 2 个变址寄存器 SI、DI 构成,它们都是 16 位寄存器。它们的特点是可以用来存放程序中要访问的内存单元的偏移地址,也可以作为通用寄存器使用,以存放操作数和运算结果,这一点和数据寄存器的作用是没有差别的。

    3. 指针寄存器

    指针寄存器包含堆栈指针 SP 和基指针 BP,当它们作为存放地址的寄存器使用时,特定地指向内存中的堆栈段。SP 的特殊性还在于调用和返回指令以及中断指令等操作都会引起 SP 中地址的自动改变。当然 SP 和 BP 同样可以作为数据寄存器使用。

    (二)段寄存器

    Intel 8086/8088 CPU 将存储器划分成若干段(如图 6 所示),把将要运行的程序各部分(代码、数据等)分别放在不同的存储段中。每个存储段用一个段寄存器来指示它的首地址(即段地址)。当 CPU 访问某存储单元(如取指令或数据存取操作数)时,就必须明确该存储单元在哪个段寄存器指向的存储段中,同时给出该存储单元在这个存储段内的偏移地址(即偏移量)。一个存储单元与它所在段的段基址之间的距离(以字节数计)叫该存储单元的偏移地址,也叫偏移量。

    用段寄存器指明存储段

    图 6 用段寄存器指明存储段

    一个程序把存储器划分成多少个存储段可以是任意的,但用 CS、DS、ES、SS 段寄存器分别指明的段叫作当前段。在程序运行的任何时刻,最多只能有 4 个当前段。4 个段寄存器有各自的作用,不能互换。CS 一定是指向存放有指令代码的代码段,SS 指向被开辟为堆栈区的堆栈段,DS 和 ES 通常指向存放数据和工作单元的数据段。

    (三)指令指针 IP

    IP 是程序不能访问的寄存器,它与其他计算机和微处理器中程序计数器 PC 的作用类同,是指令的地址指针。在程序运行期间,CPU 自动修改 IP 的值,使它始终保持为正在执行指令的下一条指令代码的起始字节的偏移量。

    用户编制的程序不能直接访问 IP,即不能用指令去取出 IP 的值或给 IP 设置给定值。但是某些指令的执行可以自动修改 IP 的内容。例如执行转移指令 JMP、JNE 等,把目的地址的偏移量送入 IP;执行调用子程序指令 CALL 时,IP 原有内容自动压入堆栈,把子程序入口地址偏移量自动送入 IP。当从子程序返回主程序时,返回指令 RET 又自动从堆栈中弹回原有 IP 的内容送回 IP。

    (四)标志寄存器

    8086/8088 CPU 设置了 1 个十六位标志寄存器,用来反映微处理器在程序运行时的状态。标志寄存器中定义了 9 个标志位,其中 6 个标志位(CF、PF、AF、ZF、SF、OF)作为状态标志,状态标志随指令的执行动态改变着,记载每一条指令刚执行完后的某些特征。另外 3 个标志位(TF、IF、DF)作为控制标志,在执行某些指令时起控制作用。图 7 中除指明控制标志位外,其余均为状态标志位。

    标志寄存器

    图 7 标志寄存器

    1. 状态标志

    (1)进位标志 CF(Carry Flag)。

    当进行算术运算时,如最高位(对字操作是第 15 位,对字节操作是第 7 位)产生进位(加法运算)或借位(减法运算),则 CF 置 1,否则置 0。CF 也可在移位类指令中使用,用它保存从最高位(左移时)或最低位(右移时)移出的代码(0 或 1)。

    (2)奇偶标志 PF(Parity Flag)。

    若操作结果低八位中含有 1 的个数为偶数时,则 PF 置 1,否则 PF 置 0。PF 只检查操作结果的低八位,与该指令操作数的长度无关。

    (3)辅助进位标志 AF(Auxiliary Carry Flag)。

    当进行算术运算时,若低半字节向高半字节产生进位(加法)或借法(减法)时,则 AF 置 1,否则置 0。AF 只反映运算结果的低八位,与操作数长度无关,它是用于十进制运算的调整。

    (4)零标志 ZF(Zero Flag)。

    若运算结果各位全为 0 时,则 ZF 置 1,否则置 0。

    (5)符号标志 SF(Sign Flag)。

    把运算结果视为带符号数。当运算结果为负数时,则 SF 置 1,为正数时,则置 0。所以,SF 与运算结果的最高位(符号位)相一致。

    (6)溢出标志 OF(Overflow Flag)。

    当运算的结果超过机器用补码所能表示数的范围时,则 OF 置 1,否则置 0。产生溢出一定是同号数相加或异号数相减的情况。

    2. 控制标志

    以下 3 个标志为控制标志。

    (1)陷阱标志(或单步标志)TF(Trap Flag)。

    当 TF=1 时,在执行完一条指令后就停下来(产生单步中断),然后由单步中断处理程序把 TF 置 0。TF 供调试程序用,如在调试程序 debug 中,可以使用单步命令,在每条指令执行后就停下来进行检查。

    (2)中断标志 IF(Interrupt Flag)。

    当 IF=1 时,允许响应可屏蔽中断。相反,IF=0 时,则不允许响应可屏蔽中断。可用开中断指令 STI 和关中断指令 CLI 设置 IF 的状态。

    (3)方向标志 DF(Direction Flag)。

    DF 为串操作指令规定增减方向。当 DF=0 时,串操作指令自动地使变址寄存器(SI 和 DI)递增(即串操作是从低地址到高地址方向进行的)。当 DF=1 时,则自动地使变址寄存器递减(即串操作是从高地址到低地址方向进行的)。DF 的状态可用 STD 和 CLD 指令设置。

    原文:Intel 8086/8088 CPU 结构与可编程寄存器

    (完)

  • 相关阅读:
    搜索1009
    搜索1004
    Java文件操作
    搜索1007
    连接查询
    SQL学习——数据类型
    SQL学习——基本语法
    <转载>GIS数据下载网站大全
    DOM查询练习
    day09【继承、super、this、抽象类】
  • 原文地址:https://www.cnblogs.com/vin-c/p/14845926.html
Copyright © 2020-2023  润新知