ICS-07

输入、输出

  • 本章输入设备选择键盘,输出设备选择显示器

输入、输出的基本概念

  • 设备寄存器(decice register):即使最简单的I/O设备,也至少包含两个寄存器:
    • 一个用来保存跟计算机之间传输的数据;
    • 另一个用来指示当前设备的状态信息。
  • 内存映射I/O与专用I/O指令
    • 指令访问I/O设备寄存器时,需要明确指明目标寄存器。通常有两种实现方法
      • 采用专门的I/O指令来访问,即专用I/O指令
      • 采用内存操作指令来完成I/O操作,即内存映射I/O
    • 专用I/O指令就是设计好的操作码来确定其行为
    • 内存映射I/O需要使用与内存访问相同的指令来操作I/O,所以设备的每个输入或输出寄存器,都必须有一个与内存中位置相同的标识方式。
    • LC-3采用内存映射I/O方式。其中,0x00000xFDFF的地址空间用于标识内存,0XFE000xFFFF则保留给外部设备使用
  • 异步I/O与同步I/O
    • I/O设备和处理器的工作节凑时不一致的,因此我们称I/O设备和CPU之间是异步的。异步通信方式下,需要通过一定的协议或握手机制来控制发送和接收。
      • 在键盘输入中,我们可采用单bit的状态寄存器称为标志(Ready),来指示是否有新的字符数
      • 在显示器输出中,我们也使用一个单bit状态寄存器,来表示最近输入的字符是否已经显示在显示器上
    • 实现同步的最简单的方式就是采用标志。
    • 如果打字员输入字符的速度是恒定的,也可以将硬件设计为定期读取一次输入寄存器。打字员和CPU的节奏是一致的,因而不需要额外的同步信息,此时称打字员和处理器的交互是同步的。
  • 中断驱动与轮询
    • 交互的两种基本方式是中断驱动和轮询
    • 根本区别在于双方是谁控制这个交互,如果由外设控制,则称为“中断驱动I/O”,如果由处理器控制,则称为“轮询方式的I/O”

键盘输入

  • 基本输入寄存器
    • 键盘需要一个键盘数据寄存器(KBDR)和一个键盘状态寄存器(KBSR)
      • KBDR的地址是0xFE02
      • KBSR的地址是0xFE00
    • KBDR的第0~7位用于存储输入字符的ASCII值,KBSR的第15位用以存储同步信息
  • 基本输入服务程序
    • KBSR[15]的作用是控制处理器和键盘之间的同步。
      • 当某个按键被按下,该键对应的ASCII存入KBDR[7:0],KBSR[15]置1,当LC-3读取KBDR时,键盘自动清除KBSR[15]。
        • KBSR[15]=0意味着键盘可以继续输入,
        • KBSR[15]=1意味着上次输入字符还未被处理器取走
    • 在轮询的方式下,程序反复读取并测试KBSR[15]位,直到它被置为1
    • 示例
START LDI R1,A
BRzp START
LDI R0,B
BRnzp NEXT_TASK
A .FILL xFE00
B .FILL xFE02
  • 将键盘KBDR寄存器中的ASCII值读入本地寄存器R0中,然后跳转至下一个任务。

  • 内存映射输入的实现

    • 在内存映射方式下,设备寄存器的输入步骤和内存操作读取完全一样。只是内存读取时,MAR保存的是内存地址,而内存映射输入时则是设备寄存器地址。内存映射方式下MDR的装入内容来自设备寄存器,而非内存单元

显示器输出

  • 基本输出寄存器(DDR和DSR)
    • 内存映射地址
      • DDR: 0xFE06
      • DSR: 0xFE04
    • DDR[7:0]输出字符的ASCII码
    • DSR[15]表示输出同步
  • 基本输出服务程序
    • 在LC-3将单个字符的ASCII值输出到DDR[7:0]时,显示器电路自动清除DSR[15],然后开始DDR[7:0]内容的处理;当显示器完成字符到屏幕的输出之后,其电路将自动设置DSR[15]位,可以下一个字符输出。
      • DSR[15]=0,显示器忙
      • DSR[15]=1,显示器空闲,可进行下一个字符
    • 示例:
START LDI R1,A
BRzp START
STI R0,B
BRnzp NEXT_TASK
A .FILL xFE04
B .FILL xFE06
+ 将R0中的字符输出到显示器上
  • 内存映射输出的实现
    • 内存映射方式下,设备输出的操作与store指令相似,只是MAR的内容是设备寄存器地址,控制逻辑使能的是设备寄存器,而不是内存单元
  • 键盘回显的代码(上述两个例子的结合)
START LDI R1,KBSR
BRzp START
LDI R0,KBDR
ECHO LDI R1,DSR
BRzp ECHO
STI R0,DDR
BRnzp NEXT_TASK
KBSR .FILL xFE00
KDSR .FILL xFE02
DSR .FILL xFE04
DDR .FILL xFE06

一个更复杂的输入程序

  • 为了让用户知道程序正在等待用户的输入,计算机可以在显示器上打印提示消息,这些消息称为提示符。它们由操作系统(%或C:)或编辑器程序(:)输出的
START ST R1,SaveR1
ST R2,SaveR2
ST R3,SaveR3
;
LEA R1,Prompt
Loop LDR R0,R1,#0
BRz Input
L2 LDI R3,DSR
BRzp L2
STI R0,DDR
ADD R1,R1,#1
BRnzp Loop
;
Input LDI R3,KBSR
BRzp Input
LDI R0,KBDR
L3 LDI R3,DSR
BRzp L3
STI R0,DDR
;
L4 LDI R3,DSR
BRzp L4
STI R2,DDR
LD R1,SaveR1
LD R2,SaveR2
LD R3,SaveR3
BRnzp NEXT_TASK
;
SaveR1 .BKLW 1
SaveR2 .BKLW 1
SaveR3 .BKLW 1
DSR .FILL xFE04
DDR .FILL xFE06
KBSR .FILL xFE00
KBDR .FILL xFe=E02
Newline .FILL x000A
Prompt .STRINGZ "Input a character>" 

中断驱动I/O

  • 中断驱动I/O本质特征是:I/O设备能够实现下列功能
    • 强行中止当前程序的运行
    • 使得处理器执行I/O设备请求
    • 最后恢复被中断程序的执行,并让它感觉好像什么事情都每发生过一样
  • 为什么要引入中断驱动I/O
    • 如果I/O操作采用轮询方式,处理器会花费大量事件探测标志位。而在中断驱动I/O下不同,如果没有中断发生,处理器可以执行其他程序;当中断发生时,处理器才暂停当前程序,并自动调用相应的I/O处理程序
    • 大大节省了时间
  • 中断信号的产生
    • 中断驱动I/O包括两部分内容
      • 中断使能机制,即I/O设备如何通知处理器
      • 传输机制,即I/O数据如何在处理器和设备之间传送
      • 即:产生中断信号,中止当前执行程序;处理该中断请求
    • 第二部分内容在堆栈技术中会了解
    • 第一部分内容(中断处理器)所必备条件
      • I/O设备自身确实需要服务
      • 设备有请求服务的权限
      • 设备中断请求的优先级高于当前处理器所运行程序的优先级。
    • 来自设备的中断信号(第一、二条件)
      • 如上述条件所列前两项所示,设备确实有请求服务的需求,且设备有足够的请求权限
        • 第一项条件,标识位即可
        • 第二项条件,是指“中断使能标志”,处理器通过设置该标志位,控制I/O设备是否有上报终端的权限。通常状态寄存器中包含有“中断允许标志(IE)”,KBSR和DSR的第14位即中断允许标志,来自I/O设备的中断请求信号是IE和Ready的逻辑与(AND)结果
          • IE清0,无论Ready中断信号都不会产生。只有通过轮询方式,才能获知设备是否已准备好新数据的传输
          • IE置1,设备处在中断驱动I/O工作方式下,即允许设备发出中断。一旦设备准备好传输新数据,Ready位被置1,设备就会产生中断信号
    • 中断优先级(第三条件)
      • 几乎所有计算机都定义了一组程序优先级别。LC-3定义了8个优先级别(PL0~PL7),数值越大优先级越高。优先级高的优先执行
    • 中断检测
      • 在增加了中断信号检测逻辑之后,指令执行的过程中6个节拍中STORE RESULT的同时还要进行中断信号INT的测试,如果INT未被设置,则一切如旧,否则控制单元回到FETCH节拍之前,需(一)、保存足够的状态信息,以备以后能正确恢复被中断程序的执行环境,(二)、将服务于该设备请求的程序入口地址装入PC寄存器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值