第二章 微处理器与总线

#微型计算机原理与接口技术 #应试笔记与八股

2.1 微型计算机系统概述

2.1.1 微型计算机的发展

无用章节,了解即可。

2.1.2 微型计算机系统组成

微型计算机系统主要由以下部分组成:
Pasted image 20240329213407.png
其中,微型计算机由以下四个部分组成:

  1. 微处理器(通常含片内总线)
  2. 总线
  3. 存储器
  4. I/O电路
    其基本结构可以表示为:
    Pasted image 20240329214615.png
    可以根据集成度分为
  • 单片机:将微处理器、总线、存储器和I/O电路集成到一个芯片上
  • 单板机:将微处理器、总线、存储器和I/O电路集成到一个电路板
  • 多板机:将微处理器、总线、存储器和I/O电路集成到多个电路板上

随堂练习:
51单片机是( )
A、中央处理器
B、微处理器
C、微型计算机
D、微机系统

答案: C,因为单片机含有微处理器、总线、存储器和I/O

2.1.2.4 总线

总线
总线是指连接计算机各部件的一组公共信号线。

总线宽度
总线上能传输的二进制信息的宽度称为总线宽度。

总线按照传输的信息的类型可以分为:

  1. 地址总线(Address Bus):是单向总线,用于传送CPU发送的地址信息,以确定存储器中信息存放的地址或I/O接口地址
  2. 数据总线(Data Bus):是双向总线,用于在CPU和存储器、I/O之间传送数据。
  3. 控制总线(Control Bus):是双向总线,用于传送控制信号,时钟信号和状态信息等。

总线也可以根据其所属单元的不同分为片内总线和片见总线。

2.1.3 微处理器的基本结构与工作过程

微处理器通常包含:

  1. 算数逻辑单元(ALU)
  2. 寄存器阵列(RA)
  3. 控制单元(CU)
    则微处理器的基本结构可以表示为:
    xYAkYLhtfo.png
    上图中从上到下从左到右依次为:
英文缩写 全拼 部件名
功能
额外说明
ALU Arithmetic
Logic Unit
算术逻辑单元 用于实现算术操作 其拥有两个输入接口( )和一个输出接口( ),分别连接到不同的总线上
FR Flag Register 标志寄存器 用于缓存各种运算产生的标志,例如缓存"发生溢出"标志
A Accumulator 累加器 最常用的寄存器,常与ALU一起完成各种运算
可以暂存上一步计算的数据
可使用指令对寄存器中数据进行位操作等
RA 寄存器阵列
PLA Programmable
Logic Array
可编程逻辑阵列
也称定时与控制电路
PC Program Counter 程序计数器 指向下一条要执行的指令的地址
ID Instruction
Decoder
指令译码器 对IR中存放的指令进行译码,
以确定要执行的操作
IR Instruction
Register
指令寄存器 存放从存储器取出的要执行的指令
AR Address
Register
地址寄存器 存放正要取出的指令的地址或操作数的地址
DR Data Register 数据寄存器 暂存数据或指令

则微处理器执行一条指令的简要流程为:

  1. 取指令
  2. 指令译码
  3. 取操作数(可选)
  4. 执行指令
  5. 存放操作结果(可选)

则执行一条指令必定发生的过程有:

  1. 取指
  2. 指令译码
  3. 执行指令
    (取指、译码、执行)

2.1.4 存储器的访问

存储器的读写主要通过控制:

  • 地址寄存器
  • 数据寄存器
  • 读/写控制信号
    进行控制,如下图所示:
    Pasted image 20240329224110.png
    上图中的地址译码器的功能是根据给定的地址,选出唯一一个有效的内存单元,通常存储器自带此功能。

2.2 8086/8088微处理器

2.2.1 8086/8088微处理器内部结构

8086系列微处理器:

  • 8086系列微处理器是Intel的16位微处理器
  • 其拥有16位数据线20位地址线
  • 端口和内存独立编址使用两套指令
  • 其指令队列缓冲器有6个字节
    8088也是16位微处理器,基本特性与8086相似,不同特性有:
  • 其拥有8位数据线
  • 指令队列缓冲器只有4个字节

8086内部结构示意图如下:
Pasted image 20240330214628.png
8086可以被分为执行单元(EU)和总线接口单元(BIU)两部分
总线接口单元BIU功能:

  1. 形成20位物理地址,由上图右上角部分负责。
  2. 从内存取指令并送到指令队列,由上图右下角部分负责。
  3. 负责操作数的存取
    执行单元EU功能:
  4. 从指令队列取指令、译码和执行
  5. 提供算术逻辑单元(ALU)
  6. 向总线接口单元BIU提供执行结果和16位段内偏移地址
    当处理到转移指令后,指令队列缓冲器会被清空。

8086 CPU的优点有

  1. 8086 CPU被分为执行单元(EU)和总线接口单元(BIU)两部分。
  2. 而执行单元和总线接口单元可以并行运行,提高了CPU效率,降低了对存储器的速度要求,相当于二级流水线。

随堂练习:

  1. 微型计算机中,CPU重复的操作是
    答案: 取指令、指令译码执行指令
  2. 8086 CPU从功能上可分为两部分,负贵执行程序的是 ,负责取指令和操作数的是 。后者通过指令队列缓冲器给前者准备指令,指令队列缓冲器的工作原则为
    答案: 执行单元(EU)、总线接口单元(BIU)、先入先出(FIFO)

2.2.2 8086/8088寄存器组

8086/8088的CPU内部有14个16位寄存器(不算I/O等),其可以被分为如下三组:

  1. 通用寄存器(8个,实际上是4个16位的,可被拆成8个8位的,这8个8位可以单独使用)
  2. 段寄存器(4个)
  3. 控制寄存器(2个)
    其结构图如下:
    Pasted image 20240330222437.png
    各寄存器的功能及含义:
寄存器
寄存器含义
功能
AX(AH、AL) 数据寄存器 通常被当成累加器使用,存放运行结果等
BX(BH、BL) 数据寄存器 通常存放数据区的首地址,常做基址寄存器
CX(CH、CL) 数据寄存器 通常被当成计数器,例如loop循环中记录循环次数
DX(DH、DL) 数据寄存器 通常被用于存放输入输出端口进行访问时用于指明端口地址
SP 堆栈指针寄存器 存放堆栈栈顶偏移地址
BP 基址寄存器 用于指出堆栈中某个单元的偏移地址
SI 源变址寄存器
DI 目的变址寄存器
IP 指令指针寄存器 程序计数器PC的实现的一部分,指向要执行的指令的偏移地址,从段寄存器开始计算,程序计数器PC即CS:IP
FLAG 状态标志寄存器 又叫程序状态字寄存器其存储的是程序状态字(PSW),具体用法见第二章 微处理器与总线 > ^lc5omw
CS 代码段段寄存器
DS 数据段段寄存器
SS 堆栈段段寄存器
ES 附加段段寄存器

注:

  1. 通用数据寄存器的"通常"意为该寄存器的隐含使用某些指令必须使用特定的寄存器来进行操作,例如有符号乘法指令 imul 默认会将乘积存放在寄存器 AX

程序状态字寄存器及状态字标志含义

状态字位: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
字含义: OF DF IF TF SF ZF AF PF CF

状态标志位(CPU自动设置):

标志位
标志位全拼
标志位含义
CF Carry Flag 进位标志,当加法或减法运算产生最高位进位或错位时触发该标志,相当与无符号运算的溢出标志位(但是符号运算也可以触发)。
PF Parity Flag 奇偶性标志,执行结果的低八位中 1 的个数为奇数时被置 1
AF Auxiliary Carry Flag 辅助进位标志位,低字节中低4位产生进位或者借位时置 1
ZF Zero Flag 零标志位,若指令运算结果为 0 时置 1
SF Sign Flag 符号标志,CPU取运算结果最高位放入此位(CPU不管该运算结果是否有符号,只取最高位放到此处)。当运行符号运算时可以用于判断运行结果的符号。
OF Overflow Flag 溢出标志,当符号运算产生算术溢出时触发该标志位,CPU判此位时以有符号运算原则判定(CPU不管实际运算是否有符号),例如下方随堂练习5和6,两正数相加得负数被判溢出。

控制标志位(用户手动设置):

标志位
标志位全拼
标志位含义
DF Direction Flag 方向标志,用于控制串指令方向,当 DF=1 时变址寄存器自动递减,反之递增。该标志使用 STD 指令置位,使用 CLD 指令清零。
IF Interrupt-enable Flag 允许中断标志位,当设置为 1 时允许中断,否则关闭可屏蔽中断。
TF Trap Flag 单步陷阱标志位,当 TF=1 时CPU进入单步工作模式,通常在调试时开启。

随堂练习:

  1. 8086/8088 CPU中,哪些寄存器既可以做8位寄存器,也可以做16位寄存器使用?

    答案: 16位数据寄存器AX、BX、CX、DX可以各自被分为高八位和低八位AH、AL;BH、BL...等
  2. 说明8086/8088 CPU中,标志寄存器中的OF是什么标志位?功能是什么?标志寄存器中的CF又是什么?功能是什么?

    答案: 1.OF是溢出标志位,CPU在运算时一律按照有符号溢出原则进行判定,其不管真实运算是否有符号。当按照有符号运算原则判定溢出后(例如两个"正数"相加结果为"负数"则触发)置1,否则置0。
    2.CF标志位是借位标志位,CPU在运算时一律按照无符号溢出原则进行判定(即借位或进位时触发),其不管真实运算是否为无符号运算。当发生进位或借位后置1,否则置0。
  3. 两个符号数相加后,若 CF=1 ,能说明结果是否溢出?请举例说明?

    答案: 1.不能。
    2.CF是辅助标志位,当加法或减法运算触发进位或借位后,CPU会将该为置 1
    3.由于负数补码的存在,一个负数和一个正数相加为正数时也会触发该位。
    4.例如8位运算 -118 + 120
          10001010
        + 01111000
        = 00000010
    
    
  4. 例题2.1:
    Pasted image 20240331152313.png

    答案: CF=0、PF=0、AF=0、ZF=0、SF=0、OF=0。
  5. 例题2.2:
    Pasted image 20240331152355.png

    答案: CF=1、PF=1、AF=0、ZF=0、SF=1、OF=0(按照有符号原则并未溢出)。
  6. 例题2.3:
    Pasted image 20240331152417.png

    答案: CF=0、PF=1、AF=1、ZF=0、SF=1、OF=1(按照有符号溢出原则,两正数相加为负数,溢出)。
  7. 已知AX=987CH,BX=7880H,执行指令 ADD AX,BX 后。AX、CF、OF的值为?

    答案: AX = 987CH = 1001 1000 0111 1100 = -26500
    BX = 7880H = 0111 1000 1000 0000 = 30848
    AX = AX+BX = 0001 0000 1111 1100 = 4348
    故:
    AX = 10FCH
    CF = 1
    OF = 0
  8. 已知AL=9CH,BL=68旦,执行指令 SUB AL, BL 后,AL、CF、OF、SF、ZF的值为?

    答案: AL = 9CH = 1001 1100 = -100
    BL = 68H = 0110 1000 = 104
    AL = 0011 0100 = 52
    故:
    AL = 34H
    CF = 0
    OF = 1
    SF = 0
    ZF = 0

2.2.3 8086/8082引脚及其功能

8086CPU引脚图:
Pasted image 20240331213455.png
注:

  1. 上图中引脚上带上划线的引脚表示低电平有效
  2. 括号内表示最小模式时功能,非括号表示最大模式时功能。
    几个特殊引脚及其功能:
引脚号 引脚label
引脚功能
2-16、39 地址和数据分时复用引脚
17 非屏蔽中断请求引脚。
18 可屏蔽中断请求引脚。
19 时钟信号引脚,通常由时钟发生器8284输入。
21 复位引脚。高电平触发,触发后使 CS=FFFFH ,其他寄存器为 0 ,即指向 FFFF0H 的位置。
通常在此处放一个转移指令,跳转到入口地址。
22 用于接收存储器或IO的就绪信号,高电平表设备空闲。
24 中断响应信号。
27 在最小模式系统中用来控制数据收发器8286/8287,要配合 引脚使用控制数据收发器(区分29、32引脚)
为高电平时,表示数据从 CPU 向外部输出,即完成写操作;
为低电平时,表示数据从外部向 CPU 输入,即完成读操作。
28 指明是操作存储器还是IO设备。
29 写信号标志引脚,表示当前CPU正在写存储器/IO。
32 读信号标志引脚,表示当前CPU正在读存储器/IO,可以控制存储单元表示读数据
33 当该引脚为低电平时,CPU工作在最大模式;会开启其他协处理器或逻辑电路,如三角函数运算加速器、DMA等。
当该引脚为高电平时,CPU工作在最小模式;
34 BHE 引脚和 S7 引脚分时复用; BHE 低电平有效,表示数据总线高八位有效,作为基地址或片选线使用。
35-38
地址线和状态线分时复用引脚(8086地址总线有20位,这是剩下4位)。

常考引脚功能:

  • ALE
  • RESET及其复位后指向的地址
  • READY
  • NMI
  • INTR
  • INTA

随堂练习:

  1. 8086系统存储器空间和I/O端口地址空间采用 编址,存储器可寻址空间为1MB(20根地址线);I/O可寻址的空间大小为 (16根地址线)。8086CPU一般采用专用的管脚 区分是对存储空间还是I/O空间操作,8086执行OUT和IN指令时,该引脚电平为(高电平,低电平,二选一)
    答案: 独立编制、65536Byte(64KB)、M/IO(IO带上划线,低电平有效)、低电平
  2. 若8086工作在最小模式下,执行 MOV AX,BUF 指令时(BUF为字变量),其引脚信号 的电平应是( )
    A. 为高电平, 为高电平
    B. 为低电平, 为高电平
    C. 为高电平, 为低电平
    D. 为低电平, 为低电平
    答案: C,因为其是讲内存中的BUF读到AX寄存器中。
  3. 若8088工作在最小模式下,执行 MOV BUF,AL 指令时(BUF为字变量),其引脚信号 的电平应是( )
    A. 为高电平, 为高电平
    B. 为低电平, 为高电平
    C. 为高电平, 为低电平
    D. 为低电平, 为低电平
    答案: D,注意8088的内存/IO引脚和8086是反向的。且注意该指令是写指令

2.3 8086/8088总线结构及总线周期时序

基本概念:

  • 时钟周期:由外部或内部时钟提供的时钟信号的周期叫做时钟周期,是CPU处理动作的最早时间单位8086/8088的时钟信号频率为5MHz,周期T=200ns
  • 总线周期总线周期也叫机器周期,是CPU通过总线对存储器进行一次读或写操作所需要的时间。一个基本总线周期由四个时钟周期组成,其可以被划分为T1~T4,如下图所示:
    Pasted image 20240331204008.png
    其T1~T4的主要工作为:
    • T1:CPU向总线输出地址信息(8086/8088CPU的地址总线和数据总线分时复用),随后地址锁存器将其锁存记录。
    • T2:CPU将总线引脚置为高阻状态,准备进行数据输入。
    • T3:存储器向CPU或CPU向存储器发送的数据。
    • T4:结束总线周期。
      注意,若存储器无法及时跟上CPU处理速度,则CPU可能会在T3插入若干个等待周期( ),CPU和存储器之间同步通过 READY 引脚进行,该引脚由存储器输出,输入到CPU中。
  • 指令周期:一条指令从存储器取出到执行完毕所需要的时间为指令周期。指令不同,指令周期也不同指令周期以总线周期为单位,任何指令的第一个总线周期都是该指令的取指令操作,因此一个指令周期应当包含一个到多个总线周期

随堂练习:

  1. 1.8086/8088系统中,CPU执行每一条指令时都需要先访问 获取指令,至少需要 个时钟周期来取指令。

    答案: 存储器、4
  2. 2.8088/8086访问慢速内存时,当 READY 管脚为低电平时,会在总线周期的 后插入Tw。

    答案: T3

2.3.1 锁存器、总线控制器、收发器

8086/8088的总线引脚:
8086的总线引脚为AD0到AD15,8088的总线引脚为AD0到AD7。
其地址总线和数据总线分时复用,故需要在电路上增设地址锁存器。

与8086/8088CPU配套的地址锁存器型号为8282/8283芯片(其中8283为反向输出芯片),配套的总线控制器为8288芯片,其连接拓扑图如下:
Pasted image 20240331212425.png
8282、8286芯片均为8位芯片,若使用8086CPU,其需要配备两组芯片才可覆盖16位。

8282三态输出锁存器的引脚图如下:
Pasted image 20240331211035.png
DI 引脚为输入引脚, DO 引脚为输出引脚。
其可以实现三态输出:
1. 高电平状态
2. 低电平状态
3. 高阻状态
其中, 引脚为输出输出使能引脚, 为高电平时为高阻态, 引脚为低电平时为数据输出态(高或低电平)。
STB 引脚应当与CPU的 ALE 引脚相连,在CPU在总线时钟的T1内 ALE 会从高电平变为低电平,触发锁存。

8286三态输出数据收发器,该芯片可选装配,用于放大CPU的输出信号功率。
其引脚及其内部结构图如下:
Pasted image 20240331212039.png
其中:
1. 16号引脚 为数据允许信号引脚,数据传输时无论是读或写均为低电平。
2. 4号引脚 为数据发送、接收段,用于控制数据读或写。

注:

  1. 上述两个芯片的引脚上带上划线的引脚表示低电平有效

随堂联系:

  1. 什么是分时复用?结合ALE引脚状态,简要说明8086CPU的AD0到AD15引脚是如何分时复用的。
    答案: 1.分时复用是指一个硬件(如总线、接口、引脚等)通过将不同的时间片划分为不同的功能来实现的同一个硬件完成多个功能的方法4。
    2.8086的数据总线和地址总线均依靠AD0到AD15引脚,故需要通过地址锁存器来分时复用完成地址传送和数据传送功能。
    3.8086引脚的ALE引脚连接到地址锁存器,在总线时钟的T1内,CPU通过AD0到AD15完成地址的指定并使ALE引脚从高电平变为低电平完成地址锁存器对地址的锁存,从而使得AD0到AD15引脚在后面的时间片可以作为数据引脚使用。

2.3.2 8086系统总线结构

结构拓扑图如下:

与8086/8088CPU配套的地址锁存器型号为8282/8283芯片(其中8283为反向输出芯片),配套的总线控制器为8288芯片,其连接拓扑图如下:
Pasted image 20240331212425.png
8282、8286芯片均为8位芯片,若使用8086CPU,其需要配备两组芯片才可覆盖16位。


注意:
  1. 控制总线包含 、... 、

2.3.3 总线周期时序

2.3.3.1 读总线时序

8086读总线时序图:
Pasted image 20240331224942.png

2.3.3.1 写总线时序

8086写总线时序图:
Pasted image 20240331224954.png

随堂练习:

  1. 在8086/8088中,在T1状态,CPU往总线发出的信号是( )
    A. 数据
    B. 状态
    C. 地址
    D. 不确定
    答案: C
  2. 下面对计算机系统三大总线描述错误的是( )
    A. 控制总线可以提供CPU访间存储器和I/O设备的时序、控制信号,并接收I/O和存储器的响应信号
    B. 地址总线用于指定CPU要访问的存储器和I/O的地址
    C. 数据总线用来传递CPU和存储器以及I/O的之间的数据但不包括指令
    D. 三大总线中地址总线不是双向的
    答案: C

2.4 8086/8088存储器的管理

2.4.1 基本概述

基本规定

  1. 8086/8088 CPU的字长为16位,且以8位(1 Byte)为编址。
  2. 8086/8088 CPU的内存存放规则为小端模式(LSB),一个变量的高地址数据存放在高地址单元,低地址数据存放在低地址单元。

基本概念:
存储单元内容:一个存储单元中存放的信息称为该存储单元的内容。
规则存放:若一个字以偶地址为开始存放,则该存放方法为规则存放。
非规则存放:若一个字以奇地址为开始存放,则该存放方法为规则存放。

对于规则存放的一个字,取其数据只需要一个指令周期;而取非规则存放的一个字需要两个指令周期,如下图所示:
Pasted image 20240402161413.png

2.4.2 内存分段技术

内存分段技术最早就是由8086 CPU引入,由于其算术逻辑单元等寄存器均为16位的寄存器,但其想要达到20位的寻址空间(1MB),因此其将20位的内存寻址空间划分为了64个逻辑段,并使用了 CSSSDSES 四个段寄存器来进行指定给程序使用,这四个段寄存器通常由操作系统设置
各段寄存器及其含义如下表所示:

段寄存器
功能
CS 代码段段地址寄存器
DS 数据段段地址寄存器
SS 堆栈段段地址寄存器
ES 附加段段地址寄存器

注意:

  1. 逻辑地址的表示格式被规定为 段地址:偏移地址因此要取的指令地址通常表示为 CS:IP ,堆栈顶单元地址通常表示为 SS:SP
  2. 段和段之间可以是连续的、分开的、部分重叠或完全重叠的,由用户做冲突管理。
  3. 段内地址转换为物理地址的计算方法为
  4. 8086是LSB,内存按照Byte编址,因此在取16位数据时注意高位在高地址,例如指令 MOV AX 2000H 及其对应的内存结构如下表所示,则该指令运行完毕后 AX=0x3412
段内内存地址 内存数据
...
2000H 0x12
2001H 0x34
...
  1. 如上一章节所述,对于规则存放的一个字,取其数据只需要一个指令周期;而取非规则存放的一个字需要两个指令周期
  2. 通常来说,各段安排顺序也是按照 CS DS ES SS 的顺序安排的。

随堂测试:

  1. 从存储器的 02000H 开始分配段区且连续分配,代码段占用8KB,数据段占用2KB,堆栈段占用256B,求代码段寄存器、数据段寄存器和堆栈段寄存器的值。
    答案: 按照各段安排顺序,其内存安排依次如下:
    1.代码段:02000H ~ 03FFFH
    2.数据段:04000H ~ 047FFH
    3.堆栈段:04800H ~ 048FFH
    因此:
    1.CS=0200H
    2.DS=0400H
    3.SS=0480H
    不要忘了再把段初始地址右移四位!!!
  2. 8086/8088系统中把内存分成若干逻辑段,有数据段, ,堆栈段, 等四种形式,每个逻辑段最长为64K字节,8066/8088管理最大实际内存空间大小为 M Byte
    答案: 代码段、附加段、1
  3. 8086/8088 CPU经加电复位后,执行第一条指令物理地址计算机经加电复位后,执行第一条指令的物理地址是
    答案: FFFF0H
  4. 计算机经过加电复位后,执行的第一条指令一般是 指令,假如CS=1200H,IP=A000H,CPU将跳到物理地址 处执行程序。
    答案: JUMP,1C000H