DJ11 8086系列处理器(第二节课)
创始人
2024-04-09 11:32:48
0

目录

一、8088CPU的系统总线

1. 最小模式

2. 最大模式

二、8086/8088 CPU 的功能结构

1.  8086/8088 CPU 的内部结构

2.  8086/8088 CPU 的内部寄存器

1)通用寄存器

2)段寄存器

3)控制寄存器

三、8086/8088 CPU 的存储器组织

1. 物理地址

2. 逻辑地址

3. 8086/8088 堆栈的组织


一、8088CPU的系统总线

1. 最小模式


 

8282 是一个三态地址锁存器:

2. 最大模式

 8286 是一个双向三态缓冲器:

二、8086/8088 CPU 的功能结构

1.  8086/8088 CPU 的内部结构

8086/8088 内部由两部分组成:

  • 执行单元(EU)
  • 总线接口单元(BIU)

8088 处理器内部结构图:

① 执行单元EU

主要功能:分析指令、执行指令、暂存中间运算结果、保留结果的特征。

EU 在工作时不断地从指令队列中取出指令代码,对其译码后产生完成指令所需要的控制信号(微命令)。数据在 ALU 中进行运算,运算结果的特征保留在标志寄存器 FLAGS 中。

② 总线接口单元 BIU

主要功能:负责 CPU 与存储器、I/O接口之间的信息传送。

8086/8088 CPU 中的寄存器均为 16 位,CPU 外部地址线位宽为 20 位。BIU 中使用地址加法器产生 20 位的物理地址,可以寻址的存储单元个数为 1M。

8088 的指令队列长度为 4 字节,8086 的指令队列长度为 6 字节。

2.  8086/8088 CPU 的内部寄存器

 8086/8088 CPU 的内部共有 14 个 16 位寄存器,包括:

  • 通用寄存器(8个)
  • 段寄存器(4个)
  • 控制寄存器(2个)

1)通用寄存器

通用寄存器包括:

  • 数据寄存器(4个)
  • 地址指针寄存器(2个)
  • 变址寄存器(2个)

(1)数据寄存器:AX、BX、CX、DX

功能:常用于存放操作数或运算结果。 

每个数据类寄存器分别可以作为两个独立的 8 位寄存器使用,从而可以方便地实现 8 位或 16 位的数据处理。

(2)地址指针寄存器:SP、BP

功能:

  • 存放操作数;
  • 作为地址指针,存放内存单元的偏移地址。

①SP:在堆栈操作中用来存放栈顶单元的偏移地址,永远指向堆栈的栈顶。

②BP:默认用于存放当前堆栈内某个单元的偏移地址,即可以对堆栈内任意单元的数据进行操作。

(3)变址寄存器:SI、DI

功能:

  • 存放操作数;
  • 作为地址指针;
  • 分别固定应用于数据的串操作指令中,提供串操作数的索引地址。


数据寄存器的特殊用途:

①AX:累加器,乘除运算中的隐含操作数以及中间结果;I/O指令中也使用AX/AL进行数据传送。

②BX:基址寄存器,常用于存放被访问内存单元数据块的基地址,默认为 DS 数据段。

③CX:计数寄存器,在循环和串操作指令中用作计数器。

④DX:数据寄存器,用于存放I/O指令中的 16 位端口地址;存放 32 位乘除运算中的高 16 位(低 16 位于 AX 中),以及 32 位除法结果中的余数。


2)段寄存器

  • CS:代码段寄存器,当前代码段的段地址。
  • DS:数据段寄存器 ,当前数据段的段地址。
  • SS:堆栈段寄存器, 当前堆栈段的段地址。
  • ES:附加数据段寄存器,当前附加数据段的段地址。

段寄存器用于存放段基址,即段起始地址的高 16 位。

3)控制寄存器

(1)指令指针寄存器 IP

功能:用于存放预取指令的偏移地址。

CPU 取指令时总是以 以 CS 为段基址,IP 为段内偏移地址 。当 CPU 从 CS 段中偏移地址为 (IP) 的存储单元中取出 指令代码的一个字节 后,IP 自动加1,指向指令代码的下一个字节。用户程序不能直接访问IP寄存器。

(2)标志寄存器或程序状态字(PSW)FLAGS

① 算术或逻辑运算结果的特征位

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

        加/减法运算时,若最高位有进/借位则 CF=1 。

PF(Parity Flag):奇偶标志位。

        运算结果的低 8 位中 1 的个数为偶数时 PF=1,为奇数时 PF=0 。

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

        加/减运算中,低位从 Bit0 开始。若 Bit3 向 Bit4 有进/借位,则 AF=1 。 

ZF(Zero Flag):零标志位。

        当运算结果为零时 ZF=1 。

SF(Sign Flag):符号标志位。

        当运算结果的最高位为 1 时 SF=1 。

        因为没有考虑运算结果是无符号数还是有符号数,所以 SF 只是告诉我们它可能是个负数。至于它具体是不是负数,还需要我们自己去判断。

OF(Overflow Flag):溢出标志位。

        当算术运算的结果超出了带符号数的表示范围时 OF=1 。

考虑两个 32 位数的加法运算。由于 8086/8088 寄存器位宽为 16 位,因此我们只能让低 16 位、高 16 位分别进行相加。其中,高 16 位要考虑由低 16 位传入的进位。

举例:

低 16 位进行运算时,有效数值部分无进位,符号位有进位。如果视作有符号数,那么就是发生了溢出,OF=1 。但实际上我们并没有计算完毕,这只是中间结果而不是最终结果,因此不能当作溢出处理。

因此在实际运算中,我们把低 16 位看作无符号数,把高 16 位看作有符号数。根据高 16 位的运算结果来判断实际运算结果是否溢出。


例、1011 0110 + 1111 0100 。


② 控制标志位

TF(Trap Flag):陷阱标志位,又称跟踪标志位。

        TF=1 时,使 CPU 处于单步执行指令的工作方式。

IF(Interrupt Flag):中断允许标志位。

        IF=1 使 CPU 可以响应可屏蔽中断请求。

DF(Direction Flag):方向标志位。

        在数据串操作时确定操作的方向。

        DF=1,地址指针按自减方式进行;DF=0,地址指针按自增方式进行。

 

三、8086/8088 CPU 的存储器组织

1. 物理地址

是指每个内存单元在整个内存空间中具有的唯一的地址。

8086/8088 CPU 有 20 根地址线,它可以产生 20 位的地址码,寻址范围为 1M。

同时,存储器按照字节进行编址,因此存储器最大容量为 1MB。

因为数据总线是 8 位,所以只能按照字节编址。

在源程序中常用 5 位十六进制数或一个符号来表示一个存储单元的地址。

(重点)

1、任何两个相邻字节单元就构成一个字单元;

2、字单元的地址为两个字节单元的低地址;

3、字数据的存放规则:低 8 位放在较低地址字节单元中,高 8 位放在较高地址字节单元中。

例如:将数据 3456H 放在地址为 09235H 的存储单元中的存储分配。

(计算)

示例:

段地址 = 段基地址 = 段基址

2. 逻辑地址

8086/8088 的存储器段结构的特点:

1、每个段最大长度为 64K(65536)个字节单元组成。

2、每个段的起始地址(段首地址)必须是一个小节的首址。

因为段首地址的低 4 位必为 0000 。

小节(Paragraph)的概念:

从 0 地址开始,每 16 个字节单元称为一个小节。1MB 内存可以划分为 64K 个小节。 

段寄存器 CS、DS、ES、SS 均为 16 位,段地址为 16 位,因此分别可以代表 64K 个段。

段内偏移地址为 16 位,因此每个段里面可以有 64K 个存储单元。


逻辑地址通常写成:XXXXH:YYYYH

  • XXXXH —— 段地址
  • YYYYH —— 段内偏移地址

物理地址 = 段地址 × 16 + 段内偏移地址

例、设某操作数存放在数据段,DS = 250AH,数据所在单元的偏移地址 = 0204H。则该操作数所在单元的物理地址为:

250AH × 16 + 0204H = 252A4H


3、逻辑段在物理存储器中可以是邻接的、间隔的、部分重叠的和完全重叠的等 4 种情况。

说明:一个物理地址可以由多个逻辑地址来表示。

例、同一个物理地址 002D3H 被两个逻辑段中的逻辑地址映射的情况。

4、在任一时刻,一个程序只能访问 4 个当前段中的内容。

4 个当前段分别是代码段、数据段、堆栈段和附加段,它们分别由 4 个段寄存器 CS、DS、SS 和 ES 提供当前段的段地址。

3. 8086/8088 堆栈的组织

在 8086/8088 微机中堆栈是由堆栈段寄存器 SS 指示的一段存储区。

按字节编址,按字存取;长度用字节数表示,长度必为偶数。

特点:

1、数据在堆栈中以字为存取单位,低 8 位放在较低地址单元,高 8 位放在较高地址单元;

以字为存取单位:如果我们分配 91 个单元,那么编译器会自动修正为 92 个单位。

2、SP 的初始化值就是堆栈的长度。由于 SP 是 16 位寄存器,因此堆栈长度小于 64KB。

16 位的表示范围为 0 ~ 65535,若我们分配 65535 个单元,自动修正值不能取到 65536,故只能取为 65534。因此,堆栈的长度小于 64KB。

3、SP 始终表示堆栈段首地址与栈顶之间的距离(字节数)。

  • 当 SP 为最大值/初始值时,表示堆栈为空;
  • 当 SP 为 0 时,表示堆栈全满。

4、当用户程序中要求的堆栈长度超过一个堆栈段的最大长度 64KB 时,可以设置多个堆栈段。

在不同堆栈之间进行切换时,记得要修改 SS 段寄存器内容。

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...