微机原理与接口技术知识总结
文章目录
本文仅总结只需记忆等相关知识点,算术运算指令、原反补码等知识点略去。
微型计算机基础知识
简介
微型计算机由微处理器、存储器、输入/输出、总线构成。
算术运算
溢出判断:$C_{n-1} \oplus C_{n-2} =0$ 。
其中 $C_{n-1}$ 表示最高位向前的进位,$C_{n-2}$ 表示次高位向前的进位, $\oplus$ 表示异或。
8086/8088 微处理器
功能结构
8088包含两大功能单元:执行单元 (EU) 和总线接口单元 (BIU) 。
执行单元 (EU)
主要功能:译码分析指令、执行指令、暂存中间运算结果并保留结果特征。
总线接口单元 (BIU)
主要功能:负责CPU与内存或输入/输出接口的信息传送,包括取指令、取操作数、保存运算结果。
引脚及功能
$\rm{MN/\overline{MX}}$切换最小/最大模式,其中最小模式为高电平。
最小模式引脚
- $\rm{IO/\overline{M}}$:三态输出,选择存储器或IO接口。
- $\rm{\overline{RD}}$:读控制信号,三态输出。
- $\rm{\overline{WD}}$:写控制信号,三态输出。
- $\rm{DT/\overline{R}}$:数据传送/接收信号,三态输出。
最大模式引脚
- $\rm{\overline{MEMR}}$:存储器读。
- $\rm{\overline{MEMW}}$:存储器写。
- $\rm{\overline{IOR}}$:IO接口读。
- $\rm{\overline{IOW}}$:IO接口写。
存储器组织
8088 CPU 有 $20$ 根地址线,可寻址 $2^{20}=1 \rm{MB}$ 内存空间,地址范围为 $00000\rm{H} \sim \rm{FFFFFH}$。每个存储单元对应一个 $20$ 位的地址(物理地址),每个存储单元物理地址唯一。
存储器分段管理
为什么存储器要分段?
因为 8088 CPU 内部寄存器的宽度为 $16$ 位,只能存放 $16$ 位的二进制数据,而 $16$ 位的寄存器无法存放$20$位的存储单元物理地址,所以对存储器采用分段式管理。
如何给存储器分段?
8088 CPU 将可直接寻址的 $1 \rm{MB}$ 内存空间划分成一些连续的区域,称为段。每段的长度最大为 $64 \rm{KB}$,并要求段的起始地址必须能被 $16$ 整除,形式如 $\rm{XXXX0H}$ 。这种形式的地址最低 $4$ 位二进制数为 $0000\rm{B}$ ,所以只要存储高 $16$ 位就可以据此得到它的 $20$ 位物理地址。
逻辑地址:$\rm{XXXXH:YYYYH}$ 。其中$\rm{XXXXH}$为段基址,$\rm{YYYYH}$为段内偏移地址。
$$ 物理地址=段基址 \times 10\rm{H} + 段内偏移量 $$
编程结构
通用寄存器
共有 $8$ 个,每个 $16$ 位。
AX
、BX
、CX
、DX
还可以分为高 $8$ 位和低 $8$ 位寄存器,如AH
、AL
等。
SP
为堆栈指针寄存器,内容为栈顶的偏移地址,与SS
配对使用。BP
为基址指针寄存器,常作为堆栈段中数组的基地址。
SI
和DI
都是变址指针寄存器。
SI
称为源变址指针寄存器。DI
称为目的变址指针寄存器。
二者通常用来存放DS
和ES
段中操作数的偏移地址。
段寄存器
- 代码段寄存器
CS
:存放当前代码段段基址。 - 堆栈段寄存器
DS
:存放堆栈段的段基址。 - 数据段寄存器
SS
:存放当前程序使用的数据段段基址。 - 附加段寄存器
ES
:存放扩展数据段段基址。
控制寄存器
包括指令指针寄存器IP
和状态标志寄存器FLAGS
。
FLAGS
FLAGS
称为标志寄存器或程序状态字,是一个 $16$ 位的寄存器,8088 CPU 只使用了其中 $9$ 位。这 $9$ 个标志位分为两类:一类称为状态标志,反映指令执行结果的特征,共有 $6$ 位;另一类是控制标志,用于控制微处理喊的操作,共有 $3$ 位。
状态标志位
CF
:进位标志。最高位产生进位或借位时置1
。PF
:奇偶标志。低 $8$ 位含有偶数个 $1$ 则置1
。AF
:辅助进位标志。若低 $4$ 位向高 $4$ 位进位则置1
。ZF
:零标志。若运算结果为 $0$ 则置1
。SF
:符号标志。若运算结果为负则置1
。OF
:溢出标志。当运算结果超出了本条指令所允许的数据范围则置1
。溢出判断见上文。
上述标志不符合置1
情况时一律置0
。
控制标志位
DF
:方向标志。置0
时按增量变化,反之按减量变化。IF
:中断允许标志。置1
时允许微处理器响应可屏蔽中断请求,反之禁止响应。TF
:单步标志。置1
时 CPU 为单步方式。
8086/8088 指令系统
8086 CPU 寻址方式
获得地址的方法,共 $8$ 种。
立即寻址
操作数为立即数。
一例
|
|
直接寻址
操作数在内存中,指令中直接给出操作数所在的内存单元的偏移地址。
一例
|
|
通常情况下,存放器操作数默认在数据段,段基址在DS
。
又一例:段超越
|
|
该例物理地址为 $\rm{ES} \times 10\rm{H} + 2000\rm{H}$。
寄存器寻址
操作数在 CPU 内部的寄存器中。
一例
|
|
寄存器间接寻址
操作数在内存中,内存单元的偏移地址存放在寄存器中。
一例
|
|
只有BX
、BP
、DI
、SI
能够作为寄存器间接寻址方式使用。BP
在作为间接寄存器使用时,段基址默认为SS
;其他 $3$ 个的默认段基址为DS
。均可段超越。
寄存器相对寻址
操作数在内存中,内存单元的偏移地址一部分由间接寻址寄存器提供,一部分是指令给定的 $8$ 位或 $16$ 位地址位移量,二者相加相成操作数的有效地址。
一例
|
|
基址变址寻址
操作数在内存中,基址寄存器和变址寄存器想加作为操作数的偏移地址。8086 CPU 中寄存器BX
和BP
为基址寄存器,SI
和DI
为变址寄存器。这种寻址方式中,一个基址寄存器加一个变址寄存器构成操作数,操作数的形式只有 $4$ 种:
|
|
8086汇编规定以基地址为主,如果基址寄存器为BP
,则操作数的段基址默认由SS
提供;若BX
为基址寄存器,则段基址默认由DS
提供。
一例
|
|
基址变址寻址方式要求必须一个基址和一个变址组合,不允许两个基址或两个变址组合,下面指令是错误的。
错误用法
|
|
基址变址相对寻址
操作数在内存中,操作数的地址由基址寄存器加上变址寄存器再加上地址位移量构成。如果基址寄存器为BP
,则段基址默认由SS
提供;若BX
为基址寄存器,则段基址默认由DS
提供。
一例
|
|
这种寻址方式主要用于二维数组操作。地址位移量作为数组首地址,基址寄存器寻址行,变址寄存器寻址列,可以很方便地实现数据阵列检索。
注意
基址变址相对寻址方式要求必须一个基址和一个变址组合,不允许两个基址或两个变址组合。
隐含寻址
操作码地指明操作数的地址,例如乘法指令、字符串操作指令。
一例
|
|
输入/输出与中断技术
I/O 接口概述
I/O 接口功能
- 地址译码
- 数据传送
- 提供握手联络信号
- 数据格式转换
- 信号电平转换
- 错误检测功能
I/O 端口
要求输入端口具有通断控制能力,输出端口具备数据锁存能力。
I/O 端口编址方式
(与存储器)统一编址
将 I/O 端口作为内存单元对待,由 CPU 统一分配地址。
特点
优点:
- 访问 I/O 端口和访问内存单元一样,所有访问内存的指令都可以访问 I/O 端口,不用设置专门的 I/O 指令;
- 利用数据传送指令就可以实现 CPU 与 I/O 端口的数据交换;
- 用测试指令可以测试端口的状态位,了解外设的状态,判断输入/输出操作的执行情况;
- 不需要专用的 I/O 端口控制信号,简化了系统总线。
缺点: 占用一部分 CPU 地址空间。
独立编址
CPU 给 I/O 端口分配一个独立的地址空间,这个地址空间与内存地址空间隔离,称为 I/O 地址空间。8088即采用该编址方式
特点
优点:
- I/O 地址空间小,地址线根数少,在接口中 I/O 端口地址译码电路较简单;
- 不占用内存空间。
缺点: 需要专用的输入/输出控制信号和专用的 I/O 指令。
数据传送控制方式
无条件传送方式
又称同步方式,适合简单外设的数据输入/输出。CPU 可直接与其进行数据交换,数据输入/输出的控制程序很简单。
程序查询传送方式
程序查询传送方式适合外部设备数量不多,而且设备相对简单、速度慢,但速度差异不大、对实时性要求不高的情况。
在有多个外设的环境中,程序查询传送方式的数据输入/输出效率低、实时性差。
中断传送方式
特点
优点:实时性好、节省 CPU 时间、外设具有申请服务的主动权,并且在一定程度上实现设备与 CPU 并行工作。
缺点:
- 中断方式仍需要通过 CPU 执行程序实现外设与 CPU 之间的信息传送;
- CPU 每次中断都需要花费时间保护断点和现场,无法满足高速 I/O 设备的速度要求。
前三种方式被统称为程序控制下的输入/输出方式,简称 PIO (Programmed Input and Output) 模式。
直接存储器存取(DMA)方式
在内存储器和 I/O 设备之间建立直接的数据通路,使 I/O 设备和内存不经过 CPU 的干预直接交换数据,实现内存与外设之间的快速数据传送。
中断
中断处理的基本过程
基本过程包括中断请求、中断判优、中断响应、中断服务、中断返回 $5$ 个阶段。
中断判优
- 软件判优
- 硬件判优:
- 菊花链判优电路
- 中断控制器判优
中断响应
中断响应时, CPU 向中断源发出中断响应信号,同时:
- 保护硬件现场。
- 关中断。
- 保护断点。
- 获得中断服务程序的入口地址。
8086/8088 中断系统
8086/8088 含有 $2$ 个中断请求信号输入引脚 $\rm{INTR}$ 和 $\rm{NMI}$,还有一个中断应答引脚 $\rm{\overline{INTA}}$。与中断相关的指令有:INT
、INTO
、INT3
、IRET
,还有 $2$ 个与中断相关的标志位 IF
、TF
。其可处理 $256$ 不同类型的中断,每种类型的中断一个编号,称为中断类型码或中断微量码,编号范围为 $0 \sim 255$ 。
中断向量和中断向量表
中断服务程序的入口地址称为中断向量。 $256$ 个中断微量存储在内存中构成了一张表,称为中断向量表。每个中断微量都包括两部分:段基址和偏移地址。因此,存放 $1$ 个中断向量需要 $4$ 个内存单元,$256$ 种中断向量共需要 $1\rm{K}$ 个内存单元。
8086/8088 系统中的中断向量表位于内存起始地址 $00000 \sim 003\rm{FFH}$ 的存储区内。每 $4$ 个单元存放一个中断向量,低地址的两个单元存放中断向量的偏移地址,高地址的两个单元存放中断向量的段基址。
中断向量在中断向量表中的存放首地址称为向量地址,其值为:中断类型码 $\times 4$ 。
执行方法
当 CPU 调用中断类型码为 $n$ 的中断服务程序时,首先把 $n$ 乘以 $4$ ,得到它的向量地址 $4n$ ,然后把 $4n+1:4n$ 两个单元的内容取出并装入 IP
寄存器;再把 $(4n+3:4n+2)$ 两个单元的内容取出并装入 CS
寄存器, CPU 就获得了 $n$ 的中断服务程序的入口地址,进而转去执行中断服务程序。
一例
DOS 系统功能调用的中断类型号为 21H
,向量地址为 $n \times 4 = 84\rm{H}$ 。
8086/8088 CPU 专用中断类型有 $5$ 个:
类型 $0$
除法错中断,结果溢出或是除以 $0$ 时发生。
类型 $1$
单步中断,也称为陷阱中断。若 TF
标志位为 1
,CPU 每执行一条指令后,就停下来等待,并提示 CPU 内部各寄存器的值和一些附带信息。
类型 $2$
非屏蔽中断,该中断不能被软件禁止。该中断由 CPU 之外的硬件产生,通过 CPU 的 $\rm{NMI}$ 引脚输入中断请求信号,上升沿触发。
类型 $3$
断点中断,由一个单字节指令 INT3
引起的中断,指令代码为 0CCH
。
类型 $4$
溢出中断,INTO
指令的专用向量。若 OF
标志位为 1
则中断,否则不执行任何操作。
硬件中断
8086/8088 有两个硬件中断请求信号输入引脚:$\rm{NMI}$ 和 $\rm{INTR}$,用来接收外部中断源产生的中断请求。前者接收非屏蔽中断请求,后者接收可屏蔽中断请求。
非屏蔽中断
非屏蔽中断,该中断不能被软件禁止。该中断由 CPU 之外的硬件产生,$\rm{NMI}$ 采用上升沿触发,优先级高于可屏蔽中断。CPU 响应该中断时,将所有内部寄存器存于使用电池的备份存储器或 EEPROM 中。该中断用于处理紧急事件。
可屏蔽中断
$\rm{INTR}$ 采用电平触发方式,高电平有效。$\rm{INTR}$ 由外部中断源置位,并在中断服务程序内部被清除。CPU 收到中断请求信号后,检测中断允许标志位 IF
,若 IF
$= 1$,CPU 响应 $\rm{INTR}$ 请求;若 IF
$= 0$, CPU 屏蔽 $\rm{INTR}$ 请求。被屏蔽的中断请求信号可一直保持高电平,直到被 CPU 接收。可屏蔽中断的优先级低于非屏蔽中断。中断允许标志位 IF
可以用指令 STI
和 CLI
进行设置。
CPU 响应 $\rm{INTR}$ 请求时,启动中断响应总线周期,发中断应答信号 $\rm{\overline{INTA}}$ 。系统连续产生 $2$ 个 $\rm{\overline{INTA}}$ 脉冲,用于从数据总线接收中断控制器送出的中断类型码。
可编程接口芯片
8255A 控制步进电机
工作在方式0下,控制字起始 $3$ 位一定为 100
,输出为0
输入为1
,无关为0
。
|
|
可编程定时器/计数器 8253
工作方式
以下工作方式均为软启动。
方式0 —— 计数结束中断
方式2 —— 频率发生器
计数器在 OUT
端产生一系列连续的脉冲信号,脉冲宽度为一个时钟脉冲的宽度。脉冲信号的周期为 $N \times T_{CLK}$,其中低电平的宽度为 $1$ 个 $T_{CLK}$。
OUT
端脉冲周期为:$T_{OUT} = N \times T_{CLK}$
脉冲频率:$F_{OUT} = F_{CLK}/{N}$
输出脉冲频率是输入脉冲频率的 $1/N$,因此 $N$ 也常被称为分频系数。
方式3 —— 方波发生器
OUT
端输出方波,其信号周期为 $N \times T_{CLK}$。$\rm{N}$为计数初值,也称为时间常数。
一例
设 8253 端口地址为 $\rm{FCF8H} \sim \rm{FCFBH}$,利用计数器 $1$ 作方波发生器,给定 $\rm{CLK_1}$ 为 $2 \rm{MHz}$,要求产生频率为 $1\rm{kHz}$ 的方波,BCD
码计数。编程初始化 8253。
|
|
数/模转换
DAC 0832输出三种波型
设 DAC 0832 的端口地址为 200H
。
|
|