输入输出程序设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章 输入输出程序设计
2018年11月9日星期五
14
8.2 程序直接控制 I/O 方式 — 延迟程序
4. • 无条件 I/O 传输 延迟子程序: – 指令执行时间 = 执行周期数 * 每周期时间。 – 不同指令执行周期不等。
• 如 MUL 为 10~11 个周期,SHL 为 1~4 个周期。
–
相同周期的指令,在不同主频的CPU上有不同的执 行时间。主频越高,执行时间越短。
; 控制程序如下 MOV AL, 01B NEXT: OUT 84H, AL CALL delay ROL AL, 1 JMP NEXT
;控制码 AL
;控制码 锁存器,点亮一个LED ;延迟一段时间,使LED持续发光 ;循环左移1位,使下一个LED发光 ;无条件循环,LED持续依次发光
IBM-PC汇编语言程序设计
;轮询三个设备的程序段 INPUT: IN AL,STAT1 ;设备1状态 TEST AL,20H ;查询设备1 Ready位 JZ DEV2 ;若设备1没准备好,查询设备2 CALL FAR PTR PROC1 ;调用设备1 I/O 程序 DEV2: IN AL,STAT2 TEST AL,20H JZ DEV3 CALL FAR PTR PROC2 DEV3: IN AL,STAT3 TEST AL,20H JZ NO_INPUT CALL FAR PTR PROC3 NO_INPUT: … JMP INPUT ;继续下一轮查询
• • • 数据:378H 状态:379H 控制:37AH
当前打印字符送数据端口 发送选通信号到控制端 口 修改打印字符指针 结束? 否
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
17
8.2 程序直接控制 I/O 方式 — 打印机端口
状态寄存器 端口 379H 忙位 0=忙 应答 0 = 可接受 控制寄存器 端口 37AH 未用 工作方式 0 = 禁止中断
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
11
8.2 程序直接控制 I/O 方式 — IO编程举例 3. IO编程举例 • 例3:将100H号字节端口的D0位置1。 – MOV DX, 100H – IN AL, DX – OR AL, 01B – OUT DX, AL • 例4:将0FFH号字节端口的D7位求反。 – IN AL, 0FFH – XOR AL, 1 SHL 7 ; 1000 0000B – OUT 0FFH, AL
– 条件I/O传送方式也称为查询传送方式。
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
16
8.2 程序直接控制 I/O 方式 — 条件 I/O:打印字符 5. 条件 I/O 传输 设置循环初始条件 cntcx; offset strsi • 编程举例:打印字符 读入设备状态字 – 程序反复读取并测试 打印机状态以控制输出。 否 Ready? – 打印机 I/O 端口: 是
IBM-PC汇编语言程序设计 第八章 输入输出程序设计 2018年11月9日星期五 12
8.2 程序直接控制 I/O 方式 — 无条件 I/O
4. • 无条件 I/O 传输 编程举例:用8位输出锁存器控制8个发光二极管,使发 光管从上向下依次闪亮。 – 设输出锁存器(控制寄存器)的地址为84H。 – 硬件电路如下: – 若锁存器输入端Dn为1,则输出端Qn为高电平。 – 若锁存器输出端Qn为高电平,LED发光。
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
2
8.1 I/O设备的数据传送方式 — 外设接口 1. 外设接口与I/O地址分配 • 外设(I/O)接口: – 主机(CPU、内存)与外设间通信的接口。 – I/O接口主要具有下述三方面功能:
• •
•
速度的匹配 信息格式的变换
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
未用 打印出错 0 = 出错 联机状态 1 = 联机 纸出界 1 = 出界
选通 1 = 输出数据 自动换行 1 = 换行 初始化 1 = 正常 选择位 1 = 接通
第八章 输入输出程序设计 2018年11月9日星期五 18
IBM-PC汇编语言程序设计
– 控制:将命令字(二进制形式)发送到命令 寄存器,由设备的控制逻辑负责操作设备。 – 状态:设备的运行状态编码为二进制数据, 存储于状态寄存器,程序读取这些状态数据 并分析处理。
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
4
8.1 I/O设备的数据传送方式 — I/O地址
• • 无条件传送方式 有条件传送方式
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
9
8.2 程序直接控制 I/O 方式 — I/O 指令 2. 80X86 CPU I/O指令 – 输入指令 IN – 输出指令 OUT – 从286起支持串输入与串输出指令:
• • 串输入指令:INS INSB INSW 串输出指令:OUTS OUTSB OUTSW
– 386起支持INSD、OUTSD指令。
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
10
8.2 程序直接控制 I/O 方式 — IO编程举例 3. IO编程举例 • 例1:从端口28与29取一个字,送字变量W。 – IN AX, 28H – MOV W, AX • 例2:测试状态寄存器(端口号27H)的D2位是 否为1:若为1则转移到Error处。 – IN AL, 27H – TEST AL, 100B ;1 SHL 2 – JNZ Error
8.2 程序直接控制 I/O 方式 — 条件 I/O 5. 条件 I/O 传输 – CPU与外设的速度不匹配 – 条件IO方式控制流程如图:
• • • • 设备准备好:Ready 设备忙:Busy 设备故障:Error 状态寄存器:Ready位或Busy位
读入设备状态 否 Ready? 是 传送数据
– 串并转换,A/D、D/A转换,电平转换等。
提供状态与控制信息
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
3
8.1 I/O设备的数据传送方式 — 外设接口寄存器 1. 外设接口与I/O地址分配 • 外设(I/O)接口: – 外设接口寄存器:
• • • (输入、输出)数据寄存器 状态寄存器 命令(控制)寄存器
读设备1状态 Ready? 否 读设备2状态 是 Ready? 否 读设备3状态 Ready? 否 设备2 I/O 程序 是 设备1 I/O 程序
是
设备3 I/O 程序
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
20
8.2 程序直接控制 I/O 方式 — 条件IO:设备轮询
IBM-PC汇编语言程序设计 第八章 输入输出程序设计 2018年11月9日星期五 8
8.2 程序直接控制 I/O 方式 — 概述 1. 程序直接控制 I/O 方式 – 通过 IO指令直接与设备(端口寄存器)传输 数据、命令、状态,控制设备。 – 要求程序员对计算机的硬件结构有较深的了 解,且程序对硬件的依赖性大。 – 程序直接控制 I/O 方式又分为:
第八章 输入输出程序设计
8.1 I/O设备的数据传送方式 8.2 程序直接控制 I/O 方式 8.3 DMA方式 8.4 中断传送方式
本章学习目标与难重点
• 学习目标 – 掌握程序直接控制I/O(查询方式)的编程方法; – 理解有关中断的基本概念; – 掌握中断程序设计方法。 • 难重点 – 处理器与外设交换数据的方式及其程序设计方法; – 中断、中断类型、中断向量、内中断、外中断、可屏 蔽中断、非屏蔽中断、中断优先级等基本概念; – 中断程序设计方法; – 中断程序的调试与运行。
第八章 输入输出程序设计
2018年11月9日星期五
5
8.1 I/O设备的数据传送方式 — PC I/O端口 1. 外设接口与I/O地址பைடு நூலகம்配 • I/O地址分配: – PC机 I/O 地址分配:
• • PC的 I/O 地址空间可达64KB,范围0~FFFFH。 端口宽度可以是8、16、32位。
IBM-PC汇编语言程序设计
1. • 外设接口与I/O地址分配 I/O地址分配: – I/O地址:接口寄存器的编号(端口地址、端口号) – 80X86 的内存地址空间与IO地址空间独立。
内存空间 I/O空间 FFFFH 64KB FFFFFH
1MB
0000H
8086 CPU 内存空间 与IO地址空间划分
00000H
IBM-PC汇编语言程序设计
•
查询方式的缺点: – 查询过程浪费CPU资源。 – 设备等待时间过长。
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
22
8.3 DMA方式 — 概述
1. • DMA概述 程序直接控制IO方式的缺点 – 所有IO操作均是通过CPU执行IO指令实现,数据均 通过CPU中转,效率低下,占用CPU资源。 – 数据传输实例:硬盘内存,硬盘硬盘,内存 内存,??? 直接存储器存取DMA方式(成组数据传送方式): – 外设与存储器进行高速的直接数据传输,而不必经由 CPU的累加器中转。 – DMA一般用于高速的设备,如磁盘、磁带、模数转 换器(A/D)、网络适配器等设备。
;数据寄存器 ;字符到数据端口 ;控制寄存器 ;控制字(命令字) ;发选通信号,STROBE = 1
;STROBE = 0
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
19
8.2 程序直接控制 I/O 方式 — 条件IO:设备轮询 5. 条件 I/O 传输 • 轮询方式: – 多个设备同时 请求IO,可以 轮流查询每个 设备的状态, 并分别调用各 自的 I/O 程序。 – 轮询三个设备的 流程图如图所示:
IBM-PC汇编语言程序设计 第八章 输入输出程序设计 2018年11月9日星期五 21
8.2 程序直接控制 I/O 方式 — 条件 I/O特点 5. 条件 I/O 传输 • 查询方式的优点: – 方便安排优先级:
• • 最先查询的设备,最早 I/O,优先级最高。 修改程序中查询的次序,即修改了优先级。
; 延迟子程序,通过重复执行若干指令消耗时间。 Delay PROC NEAR MOV CX, 60000 delay_next: LOOP delay_next ;延迟 60000个LOOP指令的执行时间 RET Delay ENDP
IBM-PC汇编语言程序设计 第八章 输入输出程序设计 2018年11月9日星期五 15
8086
D0
数据总线
锁存器 84H
D0 Q0
LED
R
D1
… D7
D1 Q1
… D7 Q7
IBM-PC汇编语言程序设计
第八章 输入输出程序设计
2018年11月9日星期五
13
8.2 程序直接控制 I/O 方式 — 无条件 I/O 4. 无条件 I/O 传输 • 编程举例:依次点亮LED – 编程思想:依次使锁存器的D0 ~ D7 位置1, 且持续一段时间。
第八章 输入输出程序设计
2018年11月9日星期五
6
8.1 I/O设备的数据传送方式 2. I/O设备的数据传送方式 • 设备分类(按数据传输速度): – 慢速(字节)设备:如键盘、鼠标、串行口 – 快速(块)设备:如磁盘、磁带、网卡 • 程序直接控制方式:慢速设备 1. 无条件传送方式 2. 程序查询方式: • 中断控制方式 • 直接存储器访问DMA方式:快速设备 – 一般适用于快速设备
8.2 程序直接控制 I/O 方式 — 条件IO:打印字符
LEA MOV print: MOV IN TEST JZ MOV MOV OUT MOV MOV OUT MOV OUT INC LOOP DX, 379H AL, DX AL, 1 SHL 7 print AL, [SI] DX, 378H DX, AL DX, 37AH AL, 01101B DX, AL AL, 01100B DX, AL SI print ;状态寄存器 ;读状态字 ;D7 == 0,表示忙 ;等待打印机准备好 SI, string CX, strlen ;预打印的字符串 ;串长度