Skip to content

IO

I/O接口:

将外设连接到总线上的一组逻辑电路的总称。 用以实现外设与主机之间的信息交换

l/O端口:

接口中的寄存器,可以由CPU读或写

端口分为三部分:

  1. 数据端口
  2. 状态端口
  3. 控制端口

CPU同外设间交换的信息由三类:

  1. 数据信息

    1. 三种类型

      1. 数字量

        1. 二进制信息——数

          ASCII码表示的数或字符

      2. 模拟量:具体的值

      3. 开关量

2.状态信息: 表示外设当前所处的工作状态。

3.控制信息: 由CPU发出的,用于控制I/O接口的工作方式以及外设的启动和停止等。

I/O端口的访问

1、输入指令

格式:IN 累加器,端口

功能:把端口中数据读到AL、或AX中。

例:IN AL,21H MOV DX,201H

​ IN AX,DX

2、输出指令

格式:OUT 端口,累加器

功能:把寄存器AL、或AX中数据输出到端口。

例: OUT 32H,AL MOV DX,201H

​ IN DX,AX

image-20230930153634514

CPU与外设交换数据的方式:

  1. 程序控制传递方式(都在运行指令)

    特点:

    1. 以CPU为中心,控制来自CPU,通过预先编写好的 I/O 程序实现数据的传送。
    2. 速度偏低,传送路径经过CPU内部寄存器同时数据 I/O 响应也比较慢
  2. 无条件传送方式 (同步传送方式)

    特点:适用于总是处于准备好状态的外设

    方法:把 I/O 指令插入到程序中,当程序执行到该指令时,外设已做好准备,于是在此指令时间内完成数据传送任务。

    优点:软件及接口硬件简单

    缺点:CPU效率低,只适用于简单外设,适应范围较窄

    asm
    #无条件查询方式
    	mov al,01h
      LL:mov dx,300h
      	out dx,al
         rol al,1
         jmp ll
  3. 查询传送方式 (异步传送方式)

    当CPU同外设不同步且不知道外设工作速率时,可采用此方式传送。传送数据前,CPU必须先对外设进行状态检测(查状态位)。

    适应场合:

    ​ 外设并不总是准备好

    ​ 对传送速率和效率,要求不高

    对外设及接口的要求:

    ​ 外设应提供设备状态信息

    ​ 接口应具备状态端口

    完成一次传送过程的步骤如下:

    1. 通过执行一条输入指令,读取所选外设的当前状态(读状态口)
    2. 根据该设备的状态决定程序去向
    3. 外设 "忙" 或 "未准备就绪" ——> 重复检测外设状态
    4. 外设 "空" 或 "准备就绪" ——> 发出 I/O 指令,进行一次数据传送(数据口)
    5. 优点:软件比较简单
    6. 缺点:CPU效率低,数据传送的实时性差,速度较慢。
    asm
    #查询传送方式
      ll:mov dx,400h
    	in al,dx   #去400h端口查询状态位
         test al,08h 
         jz ll	#判断是否等于1,等于1为准备好,否则继续查
         mov ax,1000h
         mov ds,ax
         mov al,2000h
         mov dx,300h
         out dx,al  #送 [1000]:[2000] 数据给 300h端口
  4. 中断传送方式

    1. 无条件传递和查询传送的缺点是:CPU和外设只能串行工作
    2. 为了提高系统的工作效率,充分发挥CPU的高速运算能力,引入了 "中断" 系统,利用中断来实现CPU与外设之间的数据传送,这就是中断传送方式。

    特点(外设主动打断CPU):

    ​ 外设在需要时间向CPU提出请求,CPU再去为它服务。服务结束后或在外设不需要时,CPU可执行自己的程序。

    ​ 中断使CPU和外设以及外设之间能并行工作。

    工作过程:

    ​ 在中断传送方式中,需要提前安排好某一服务程序(外设),当外设完成数据传送的准备后,向CPU发出中断请求信号,在CPU可以响应中断的条件下,主程序被 "中断" ,转去执行 "中断服务程序",来服务中断。

    优点:

    ​ CPU效率高,实时性好,速度快

    缺点:

    ​ 程序编制较为复杂

以上三种 I/O 方式的共性

无条件、查询、中断、程序、均需 CPU 作为中介:

​ 软件:外设与内存之间的数据传送是通过 CPU 执行程序来完成的。

​ 硬件:I/O 接口和存储器的读写控制信号,地址信号都是由 CPU 发出的。

​ 缺点:

​ 程序的执行速度限定了传送的最大速度。

DMA(直接存储器读取)传递方式

​ 外设和内存之间之间传送数据的方式,即 DMA 传送方式,在 DMA 传送方式中,对这一数据传送过程进行控制的硬件称为 DMA 控制器(DMAC)。

特点:

​ 外设直接与存储器进行数据交换,不需要 CPU 干预也不需要软件介入。

​ 总线由DMA控制器(DMAC)进行控制(CPU要放弃总线控制权),内存/外设的地址和读写控制信号均由DMAC提供。

1.DMA操作的基本方法

(1)周期挪用(Cycle Stealing)

(2)周期扩散

(3)CPU停机方式

最常用,最简单的传送方式

2.DMA的传送方式

(1)单字节传送方式

每次DMA传送只传送一个字节就立即释放总线。

(2)成组传送方式

DMAC在申请到总线后,将一组数据传送完后才释放总线,而不管中间DREQ是否有效。

(3)请求传送方式(查询传送方式)

成组传送,但每传送一个字节后,DMAC查DREQ,有效传,无效挂起。

3.DMAC(DMA控制器)的基本功能(查询传送方式)

(1)能接收外设的请求,向CPU发出DMA请求信号。

(2)当接到CPU发出DMA响应信号后,DMAC接管对总线的控制,进入DMA方式。

(3)能寻址存储器,即能输出地址信息和修改地址。

(4)能向存储器和外设发相应的读/写控制信号。

(5)能控制传送的字节数,判断DMA是否结束。

(6)在DMA传送结束后,能结束DMA请求信号,释放总线,使CPU恢复正常工作。

统一编址(存储器映像):

在这种编址方式中,I/O 端和内存单元统一编址,即把 I/O 端口当作内存单元对待,从整个内存空间中,划出一个子空间给 I/O 端口,每一个 I/O 端口分配一个地址码,用访问存储器的指令对 I/O 端口进行操作。

优点:

​ 访问内存指令适用于 I/O 端口,对于 I/O 端口的数据处理能力强。

​ CPU 无需产生区别访问内存操作和 I/O 操作的控制信号,从而可减少引脚。

缺点:

​ 程序中 I/O 操作不清晰,难以区分程序中的 I/O 操作和存储器操作

​ I/O 端口占用了一部分内存空间

独立编址(8086在用):

8086采用的是 IO 独立编址

I/O 端口编址和存储器的编址相互独立,即 I/O 端口地址空间和存储器地址,空间分开设置,互不影响。采用这种编址方式,对 I/O 端口的操作使用输入、输出指令(I/O 指令)需要用 m/I O 非区分访问的是内存还是 I/O (外部空间)

优点:

​ 不占用内存空间

​ 使用 I/O 指令,程序清晰,很容易看出是 I/O 操作还是存储器操作

​ 译码电路比较简单(因为 I/O 端口的地址空间一般比较小,所用地址线也就较少)。

缺点:

​ 需要特点的引脚来区分内存和 IO 单元的访问。