Skip to main content

7 输入/输出系统

输入/输出系统 是微型计算机系统中的主机与外部设备进行交互的系统。主机通过输入/输出接口与外部设备连接,在接口电路驱动程序控制下进行信息交换。

接口#

接口:是CPU与外部设备交换信息的中转站

接口电路的功能

  • 应具有数据暂存/缓冲功能
  • 与外设之间有联络功能,提供外设状态
  • 应有端口地址编码器,具有寻址功能(便于IN,OUT指令读写数据)
  • 有数据转换功能(并➡️串,串➡️并)
  • 有中断管理能力

端口#

端口:是接口电路中,能与CPU交换信息(使用IN,OUT)的寄存器

端口分类:(接口电路必须具有数据口)联系总线

  • 数据口:存放CPU向外设输出或外设输入的数据
  • 控制口:存放控制信息--控制接口电路、外设的工作
  • 状态口:存放状态信息——反映外设的状态。

端口编址方式#

每个端口,系统都为它编一个地址,系统只要给出某个地址,通过译码电路,就能找到相应地I/O接口电路中的端口寄存器

❓系统给出的地址是内存单元地址还是I/O端口寄存器的地址?

解决方案:合理安排I/O端口寄存器的编址方式

  • 存储器映像方式

    把端口寄存器和存储单元等同看待,统一编址

    特点:凡访问存储单元的指令都可以访问I/O端口,端口地址占用存储空间

  • I/O端口独立编址

    特点:I/O端口不占用存储空间,CPU要有专用的I/O指令

PC系列机采用端口独立编址

  • 从8086到奔腾微处理器,设计时用A15~A0低16位地址寻址I/O端口,所以端口寻址能力为216=655362^{16}=65536
  • 基于微处理器的PC系列,实际使用CPU中A9A0A9\sim A0做I/O地址线,所以,PC系列机I/O端口地址最多为210=10242^{10}=1024个。这1024个口地址,系统本身(主板上, 以及常规 I/O接口)已经占用了一部分。
  • 端口地址( I/O 空间)没有分段的概念。

最常用的I/O指令#

直接寻址I/O指令#

设N为8位端口地址

IN  AL,N  ;口地址为N的端口中取数给ALOUT N, AL ;AL内容给口地址为N的端口寄存器IN  AX,N  ;[N]->AL,[N+1]->AHOUT N, AX ;AL->[N],AH->[N+1]

DX间址的I/O指令#

当口地址N>8位二进制数时,用DX间址,但是书写时不能加方括号

IN      AL,  DX   ;  [DX]的端口内容 → ALOUT     DX,  AL   ;  AL →[DX]的端口寄存器IN      AX,  DX   ;  [DX] → AL, [DX+1] → AHOUT     DX,  AX   ;  AL → [DX], AH → [DX+1]

注意:I/O指令只能在端口和AL,AX,EAX之间交换信息,用DX间址,但不能使用方括号,即不能写成IN AL,[DX]

微型系统与外设交换信息的方式#

微机系统与I/O端口的信息交换有四种方式:

  1. 无条件传送
  2. 查询方式
  3. 中断方式
  4. DMA方式:DMA方式是说直接存储器存取方式(Direct Memory Access)。为实现DMA方式而设计的专用控制芯片,称为DMA控制器(DMAC)DMAC的HLDA为总线响应信号,HOLD为总线信号引脚

采用何种方式与接口的硬件电路有直接关系。

无条件传送#

无条件传送方式进行数据读取,完成将201H端口中的8位数据读取到AL寄存器中

MOV DX, 201HIN  AL, DX

无条件传送方式进行数据写入,完成将AL寄存器中的8位数据写入201H端口中

MOV DX, 201HMOV AL, 7FHOUT DX, AL

查询方式#

检测200H端口状态完成将AL寄存器中8位数据输出/写入到将201H端口中

查询方式输入

RSCAN:   MOV  DX, 200H         IN   AL, DX         TEST AL, 80H  ;反复查询外设端口状态         JZ   RSCAN    ;外设没有准备好,则返回重新查询,直到外设准备好                  MOV  DX, 201H         IN   AL, DX   ;端口输出输入到寄存器

查询方式输出

TSCAN:  MOV  DX, 200H        IN   AL, DX        TEST AL, 1    ;反复查询外设端口状态        JNZ  TSCAN    ;外设没有准备好,则返回重新查询,直到外设准备好                MOV  DX, 200H        MOV  AL, 1FH        OUT  DX, AL   ;寄存器数据输出到端口