微机原理与接口技术 第六章 输入输出系统(持续更新)
作者:互联网
一、输入输出接口的结构和功能
接口由硬件和软件组成
接口硬件:
接口软件:
- 初始化程序段:
设备驱动程序、设定芯片工作方式等 - 数据交换程序段:
管理、控制、驱动外设,负责外设和系统间信息交换。
为什么需要I/O接口(电路)?
- 微机的外部设备多种多样
- 工作原理、信息格式、工作速度等方面差别很大
- 外设不能与CPU直接相连
- 必须经过中间电路再与系统相连
- 这部分电路被称为lO接口电路
什么是I/O接口(电路)?
- I/O接口是位于系统与外设间、用来协助完成数据传送和控制任务的逻辑电路;
- 可编程接口芯片、I/O总线槽的电路板(适配器)都是接口电路。
1. 接口功能
- 速度匹配,数据缓冲
(CPU 与外设速度以及种类的不一致,数据在输入的时候要有缓冲、输出的时候要有锁存器。) - 数据格式转换
- 对I/O端口进行寻址,进行地址译码
- CPU与I/O外设信息联络
- 设置中断和DMA控制逻辑
2. 联络信息种类
- C P U 与 接 口 { D B A B C B : R D ‾ 、 W R ‾ 、 M / I O ‾ CPU与接口\begin{cases} DB\\ AB\\ CB:\overline{RD}、\overline{WR}、M/\overline{IO} \end{cases} CPU与接口⎩⎪⎨⎪⎧DBABCB:RD、WR、M/IO
-
接
口
与
外
设
{
数
据
信
号
状
态
信
号
控
制
信
号
接口与外设\begin{cases} 数据信号\\ 状态信号\\ 控制信号 \end{cases}
接口与外设⎩⎪⎨⎪⎧数据信号状态信号控制信号
二、输入输出指令
1. I/O端口(port)的编址
① I/O端口泛指l/O地址,对应接口电路的寄存器;
② 一个接口电路可以具有多个I/O端口(寄存器)数据端口、状态端口和控制端口。
④ 8088/8086用于寻址外设端口的地址线为
16
16
16条
⑤ 端口最多有:
2
16
=
65536
=
64
K
B
2^{16}=65536=64KB
216=65536=64KB个
⑥ 端口号:
0000
H
∼
F
F
F
F
H
0000H\sim FFFFH
0000H∼FFFFH
⑦ 两种编址:独立编址、统一编址
(1)I/O独立编址
- I/O接口具有独立指令,如8088/8086为 I N / O U T IN/OUT IN/OUT
- I/O接口空间与主存空间各自独立
如 { 8086 I / O 空 间 : 64 K B ( 0000 H ∼ F F F F H ) 8086 主 存 空 间 : 1 M B ( 00000 H ∼ F F F F F H ) 如\begin{cases}8086I/O空间:64KB(0000H\sim FFFFH)\\ 8086主存空间:1MB(00000H\sim FFFFFH)\end{cases} 如{8086I/O空间:64KB(0000H∼FFFFH)8086主存空间:1MB(00000H∼FFFFFH)
优 点 { 1. I / O 端 口 的 地 址 空 间 独 立 2. 控 制 和 地 址 译 码 电 路 简 单 3. 专 门 的 I / O 指 令 优点\begin{cases}1.\ I/O端口的地址空间独立\\ 2.\ 控制和地址译码电路简单\\ 3.\ 专门的I/O指令\end{cases} 优点⎩⎪⎨⎪⎧1. I/O端口的地址空间独立2. 控制和地址译码电路简单3. 专门的I/O指令
缺 点 { I / O 指 令 种 类 少 缺点\begin{cases}I/O指令种类少\end{cases} 缺点{I/O指令种类少
(2)I/O与主存统一编址
- I/O接口与主存具有一套指令系统
- I/O接口与主存使用相同地址空间
如 { 1 M B : 00000 H ∼ F F F F F H 如\begin{cases}1MB:00000H\sim FFFFFH\end{cases} 如{1MB:00000H∼FFFFFH
优 点 : { 1. 不 需 要 专 门 的 I / O 指 令 2. I / O 数 据 存 取 灵 活 优点:\begin{cases} 1.\ 不需要专门的I/O指令\\ 2.\ I/O数据存取灵活\end{cases} 优点:{1. 不需要专门的I/O指令2. I/O数据存取灵活
缺 点 : { 1. I / O 端 口 要 占 去 部 分 存 储 器 地 址 空 间 2. 程 序 不 易 阅 读 ( 不 易 分 清 访 存 和 访 问 外 设 ) 缺点:\begin{cases} 1.\ I/O端口要占去部分存储器地址空间\\ 2.\ 程序不易阅读(不易分清访存和访问外设)\end{cases} 缺点:{1. I/O端口要占去部分存储器地址空间2. 程序不易阅读(不易分清访存和访问外设)
2. I/O端口(port)寻址方式
(1)直接寻址
只寻址
00
H
∼
F
F
H
00H\sim FFH
00H∼FFH前256个端口
指令中操作数直接使用端口号
(2)间接寻址
可寻址全部(64K)端口:
0000
H
∼
F
F
F
F
H
0000H\sim FFFFH
0000H∼FFFFH
DX寄存器的值存放端口号
0100
H
∼
F
F
F
F
H
0100H\sim FFFFH
0100H∼FFFFH的端口只能采用间接寻址方式
3. 指令格式
- 输入指令:
I
N
A
L
/
A
X
,
p
o
r
t
IN\ AL/AX,port
IN AL/AX,port
(将外设数据传送给CPU内的AL/AX )
I N A L / A X , p o r t IN\ AL/AX,port IN AL/AX,port
I N A L , D X / i 8 ; 字 节 输 入 IN\ AL,DX/i8 \qquad\color{DeepSkyblue}{;字节输入} IN AL,DX/i8;字节输入
I N A X , D X / i 8 ; 字 输 入 IN\ AX,DX/i8 \qquad\color{DeepSkyblue}{;字输入} IN AX,DX/i8;字输入
I N A L , 10 H ; A L = 12 H IN\ AL,10H \qquad\color{DeepSkyblue}{;AL=12H} IN AL,10H;AL=12H
I N A X , 10 H ; A L = 3412 H IN\ AX,10H \qquad\color{DeepSkyblue}{;AL=3412H} IN AX,10H;AL=3412H
M O V D X , 1000 H ; 直 接 寻 址 只 寻 址 00 H ∼ F F H 前 256 个 端 口 需 , 要 使 用 间 接 寻 址 , D X 寄 存 器 的 值 存 放 端 口 号 MOV\ DX,1000H \qquad\color{DeepSkyblue}{;直接寻址 只寻址00H\sim FFH前256个端口需,要使用间接寻址,DX寄存器的值存放端口号} MOV DX,1000H;直接寻址只寻址00H∼FFH前256个端口需,要使用间接寻址,DX寄存器的值存放端口号
I N A L / A X , D X IN\ AL/AX,DX IN AL/AX,DX
- 输出指令:
O
U
T
p
o
r
t
,
A
L
/
A
X
OUT\ port,AL/AX
OUT port,AL/AX
(将CPU内的AL/AX数据传送给外设)
O U T p o r t , A L / A X OUT\ port,AL/AX OUT port,AL/AX
O U T D X / i 8 , A L ; 字 节 输 出 OUT\ DX/i8,AL\qquad\color{DeepSkyblue}{;字节输出} OUT DX/i8,AL;字节输出
O U T D X / i 8 , A X ; 字 输 入 OUT\ DX/i8,AX\qquad\color{DeepSkyblue}{;字输入} OUT DX/i8,AX;字输入
例:从内存bvar单元取一个字节送到300H端口
b v a r D B 12 H bvar\ DB\ 12H bvar DB 12H
.
.
.
M O V A L , b v a r ; A L = 12 H MOV\ AL,bvar\qquad\color{DeepSkyblue}{;AL=12H} MOV AL,bvar;AL=12H
M O V D X , 300 H MOV\ DX,300H MOV DX,300H
O U T D X , A L OUT\ DX,AL OUT DX,AL
例:从内存wvar单元取一个字送300H端口
w v a r D W 1234 H wvar\ DW\ 1234H wvar DW 1234H
.
.
.
M O V A X , w v a r ; A X = 1234 H MOV\ AX,wvar\qquad\color{DeepSkyblue}{;AX=1234H} MOV AX,wvar;AX=1234H
M O V D X , 300 H MOV\ DX,300H MOV DX,300H
OUT\ DX,AX
4. I/O地址译码
- 门电路:接口电路只占少量I/O地址,可以利用线选法地址译码。
A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 \quad A_{9}\ A_{8}\ \ A_{7}\ A_{6}\ A_{5}\ A_{4}\ \ A_{3}\ A_{2}\ A_{1}\ A_{0} A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
1 1 1 1 1 0 0 1 1 1 3 E 7 H \quad1\quad1\quad\ 1\quad1\quad1\quad0\quad\ 0\quad1\quad1\quad1\qquad3E7H 11 1110 01113E7H
- 译码器:选用2:4或3:8进行地址译码。
C B A \quad\ \ \quad\quad\quad\quad C\quad B\ \ A CB A
A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 \quad A_{9}\ A_{8}\ \ A_{7}\ A_{6}\ A_{5}\ A_{4}\ \ A_{3}\ A_{2}\ A_{1}\ A_{0} A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
1 1 0 0 0 0 0 0 0 0 300 H \quad1\quad1\quad\ 0\quad0\quad0\quad0\quad\ 0\quad0\quad0\quad0\qquad300H 11 0000 0000300H
1 1 0 0 0 0 1 1 1 1 30 F H \quad1\quad1\quad\ 0\quad0\quad0\quad0\quad\ 1\quad1\quad1\quad1\qquad30FH 11 0000 111130FH
Y 0 ‾ 接 口 芯 片 地 址 : 300 H ∼ 30 F H \overline{Y_0}接口芯片地址:300H\sim30FH Y0接口芯片地址:300H∼30FH
C B A \quad\ \ \quad\quad\quad\quad C\quad B\ \ A CB A
A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 \quad A_{9}\ A_{8}\ \ A_{7}\ A_{6}\ A_{5}\ A_{4}\ \ A_{3}\ A_{2}\ A_{1}\ A_{0} A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
1 1 0 0 0 1 0 0 0 0 310 H \quad1\quad1\quad\ 0\quad0\quad0\quad1\quad\ 0\quad0\quad0\quad0\qquad310H 11 0001 0000310H
1 1 0 0 0 1 1 1 1 1 31 F H \quad1\quad1\quad\ 0\quad0\quad0\quad1\quad\ 1\quad1\quad1\quad1\qquad31FH 11 0001 111131FH
Y 1 ‾ 接 口 芯 片 地 址 : 310 H ∼ 31 F H \overline{Y_1}接口芯片地址:310H\sim31FH Y1接口芯片地址:310H∼31FH
. \qquad. .
. \qquad. .
. \qquad. .
三、传送控制方式
-
程 序 传 送 控 制 方 式 : 程序传送控制方式: 程序传送控制方式:
CPU执行程序中的I/O指令(IN/OUT)完成传送
分为:无条件传送、查询传送、中断传送。
-
直 接 存 储 器 ( 硬 件 ) 存 取 ( D M A ) : 直接存储器(硬件)存取(DMA) : 直接存储器(硬件)存取(DMA):
DMAC利用系统总线在外设和主存间传送。
-
I
/
O
处
理
机
(
硬
件
)
实
现
数
据
传
送
:
I/O处理机(硬件)实现数据传送:
I/O处理机(硬件)实现数据传送:
CPU委托专门的I/O处理机(IOP8089)来完成数据传送。
1. 无条件(同步)传送方式
原理:CPU与慢速外设交换数据。外设处于“就绪”状态,随时可以进行数据传送,亦称同步传送。(适合于简单设备,如LED数码管、按键等)
传送条件:外设必须随时就绪。
{ 1. 外 设 已 经 准 备 “ 就 绪 ” { 输 入 : 数 据 已 经 放 在 三 态 缓 冲 区 , 准 备 好 数 据 。 输 出 : 外 设 及 时 从 锁 存 器 中 取 走 数 据 , 锁 存 器 为 “ 空 ” 时 , C P U 传 下 一 个 数 据 2. 传 送 双 方 已 经 约 定 外 设 会 在 C P U 规 定 的 时 间 内 完 成 数 据 的 输 入 和 输 出 . \begin{cases}1.\ 外设已经准备“就绪”\begin{cases} 输入:数据已经放在三态缓冲区,准备好数据。\\ 输出:外设及时从锁存器中取走数据,锁存器为“空”时,CPU传下一个数据 \end{cases}\\ 2.\ 传送双方已经约定外设会在CPU规定的时间内完成数据的输入和输出. \end{cases} ⎩⎪⎨⎪⎧1. 外设已经准备“就绪”{输入:数据已经放在三态缓冲区,准备好数据。输出:外设及时从锁存器中取走数据,锁存器为“空”时,CPU传下一个数据2. 传送双方已经约定外设会在CPU规定的时间内完成数据的输入和输出.
2. 条件传送控制方式(查询/异步)
(1) 特点
{ 1. C P U 等 待 外 设 准 备 数 据 或 取 走 数 据 后 , 进 行 数 据 的 输 入 与 输 出 操 作 。 2. 解 决 C P U 与 外 设 不 同 步 传 送 数 据 的 问 题 。 3. C P U 通 过 执 行 主 程 序 中 I N / O U T 实 现 数 据 的 输 入 与 输 出 。 4. 在 传 送 数 据 之 前 需 检 测 外 设 状 态 。 5. 工 作 可 靠 , 但 传 送 效 率 低 。 \begin{cases}1.\ CPU等待外设准备数据或取走数据后,进行数据的输入与输出操作。\\ 2.\ 解决CPU与外设不同步传送数据的问题。\\ 3.\ CPU通过执行主程序中IN/OUT实现数据的输入与输出。\\ 4.\ 在传送数据之前需\pmb{检测外设状态}。\\ 5.\ 工作可靠,但传送效率低。\end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧1. CPU等待外设准备数据或取走数据后,进行数据的输入与输出操作。2. 解决CPU与外设不同步传送数据的问题。3. CPU通过执行主程序中IN/OUT实现数据的输入与输出。4. 在传送数据之前需检测外设状态检测外设状态检测外设状态。5. 工作可靠,但传送效率低。
(2) 过程
①
查
询
{
1.
C
P
U
读
外
设
状
态
I
N
A
L
,
p
o
r
t
2.
C
P
U
检
测
状
态
是
否
就
绪
{
T
e
s
t
A
L
,
.
.
.
J
Z
/
J
N
Z
L
1
3.
判
结
果
:
若
就
绪
进
行
数
据
传
送
,
否
则
循
环
读
状
态
字
①查询\begin{cases}1.\ CPU读外设状态IN\ AL,port\\ 2.\ CPU检测状态是否就绪\begin{cases} Test\ AL,...\\ JZ/JNZ\ L1 \end{cases}\\ 3.判结果:若就绪进行数据传送,否则循环读状态字 \end{cases}
①查询⎩⎪⎪⎪⎨⎪⎪⎪⎧1. CPU读外设状态IN AL,port2. CPU检测状态是否就绪{Test AL,...JZ/JNZ L13.判结果:若就绪进行数据传送,否则循环读状态字
②
传
送
{
外
设
就
绪
后
,
寻
址
数
据
口
输
入
:
I
N
指
令
从
数
据
端
口
读
入
数
据
输
出
:
O
U
T
指
令
向
数
据
端
口
输
出
数
据
②传送\begin{cases} 外设就绪后,寻址数据口\\ 输入:IN指令从数据端口读入数据\\ 输出:OUT指令向数据端口输出数据\\ \end{cases}
②传送⎩⎪⎨⎪⎧外设就绪后,寻址数据口输入:IN指令从数据端口读入数据输出:OUT指令向数据端口输出数据
例:某查阅传送输入端口,状态口地址为2F0H,状态为位 D 7 D_7 D7=1,表示外设准备好数据,数据口地址为2F1H,要从输入设备读入一个字节存入内存buf单元,编程
l e a B X , b u f \qquad lea\ BX,buf lea BX,buf
M O V D X , 2 F 0 H \qquad MOV\ DX,2F0H MOV DX,2F0H
L 1 : I N A L , D X ; 读 状 态 L_1:IN\ AL,DX \qquad\color{DeepSkyblue}{;读状态} L1:IN AL,DX;读状态
T e s t A L , 80 H \qquad Test\ AL,80H Test AL,80H
J Z L 1 \qquad JZ\ L_1 JZ L1
M O V D X , 2 F 1 H \qquad MOV\ DX,2F1H MOV DX,2F1H
I N A L , D X \qquad IN\ AL,DX IN AL,DX
M O V [ B X ] , A L \qquad MOV\ [BX],AL MOV [BX],AL
输出,从buf单元输出一个字节到显示器的端口地址上。
l e a B X , b u f \qquad lea\ BX,buf lea BX,buf
M O V A H , [ B X ] \qquad MOV\ AH,[BX] MOV AH,[BX]
M O V D X , 2 F 0 H \qquad MOV\ DX,2F0H MOV DX,2F0H
L 1 : I N A L , D X L1:IN\ AL,DX L1:IN AL,DX
T e s t A L , 80 H \qquad Test\ AL,80H Test AL,80H
J Z L 1 \qquad JZ\ L_1 JZ L1
M O V D X , 2 F 1 H \qquad MOV\ DX,2F1H MOV DX,2F1H
M O V A L , A H \qquad MOV\ AL,AH MOV AL,AH
O U T D X , A L \qquad OUT\ DX,AL OUT DX,AL
3. 中断传送控制方式
(1)定义:
当外设输入/输出数据准备好时,主动向CPU发中断请求,使CPU中止当前程序的运行,转出执行外设传送数据的服务程序,进行数据的输入/输出,传送完毕后,CPU会返回原程序的过程。
(2)特点:
①是一种效率较高的程序传送方式;
②中断服务程序是预先设计好的;
③CPU在每条指令周期后采样中断请求输入信号;
④外设需要传数据时,主动向CPU提出中断请求,提高实时性;
⑤外设准备数据和CPU执行程序并行工作,提高了CPU效率;
⑥每传输一次数据就要中断一次,需保护断点和现场;
⑦需要中断控制器8259芯片
⑧适合少量数据、中慢速外设的数据传送,如键盘、鼠标。
(3)传送过程
见第二章:中断过程
① 中断请求:外设请求CPU进行
② 中断判优
③ 中断响应:
响
应
条
件
:
{
1.
C
P
U
必
须
执
行
完
当
前
的
指
令
2.
C
P
U
处
于
开
中
断
3.
不
能
有
更
高
级
(
优
先
级
)
的
中
断
请
求
响应条件:\begin{cases}1.\ CPU必须执行完当前的指令\\ 2.\ CPU处于开中断\\ 3.\ 不能有更高级(优先级)的中断请求\end{cases}
响应条件:⎩⎪⎨⎪⎧1. CPU必须执行完当前的指令2. CPU处于开中断3. 不能有更高级(优先级)的中断请求
③ 中断处理:使用中断服务子程序中IN/OUT指令,进行数据的输入/输出。
④ 中断返回:完成一次中断传送返回原程序。
4. DMA传送控制方式
(1)定义:不需要CPU介入由专门硬件DMAC(8237芯片)直接控制数据传送,可以成块传送一批数据,适用于高速外设与主存的直接传送。
(2)过程:三个阶段
{
传
送
前
预
处
理
传
送
传
送
后
处
理
\begin{cases} 传送前预处理\\ 传送\\ 传送后处理 \end{cases}
⎩⎪⎨⎪⎧传送前预处理传送传送后处理
DMA传送过程:
①外设向DMAC发出请求。
②DMAC向CPU申请总线(hold ) 。
③CPU完成当前总线周期后响应(hlda) ,并释放
总线控制权。
④DMAC得到总线控制权,发出DMA响应信号。
⑤由DMAC发出读写控制信号,控制外设与存储器
之间的数据传送。
⑥数据传送完后,DMAC撤销HOLD信号。
⑦CPU释放HLDA信号,并重新控制总线。
(3)特点:
① 传送过程中不需要CPU,CPU效率提高
② 8237传送数据时,CPU执行自己的工作,两者完全并行
③ 8237没有总线,传送前/后需向CPU请求/归还总线
④ 高速外设、硬盘与内存之间用的就是这种传输方式。
例:CPU与慢速的外设进行数据传送时,采用___ C _____方式可提高CPU效率
A. 无条件传送
B. 查询
C. 中断
D. DMA
一个外设接口中必须要有数据端口、地址端口 ( 改 为 状 态 端 口 ) \color{DeepSkyblue}{(改为状态端口)} (改为状态端口)、控制接口(×)
标签:传送,接口技术,输入输出,AL,微机,DX,cases,CPU,外设 来源: https://blog.csdn.net/qq_35706314/article/details/122144418