应用篇-输入输出程序设计
18
有时系统中同时有几个设备要求输入/出数据,那么对 每个设备都要编写一段执行输入/出数据的程序,然后 轮流查询这些设备的准备位,当某一设备准备好允许 输入/出数据时,就调用这个设备的I/O程序完成数据 传输,否则依次查询下一个设备是否准备好
19
例如:CUP要从3个设备轮流输入数据。PROC1,PROC2, PROC3分别是设备1,2,3的数据输入程序,它们的状态 寄存器端口地址分别用STA1,STA2,STA3表示,这三个 状态寄存器的第5位是输入准备位。
out dx, al
13
使用I/O指令对端口地址进行直接的输入,比调用DOS功 能或BIOS例行程序更能提高数据的传送速度和吞吐量, 但同时也要求程序员对计算机的硬件结构有一定的了解, 其程序对硬件的依赖性也大,因此,对于一般的程序设 计,我们还是尽可能使用DOS或BIOS功能调用(它们也 是用IN,OUT指令与外设交换信息的)
14
关于INS 8250串行通讯口I/O的例子。 数据寄存器的端口地址是03F8H 状态寄存器的端口地址是03FDH,其中0位是输入数 据准备位,5位是输出数据准备位。
15
COM_IN COM_IN1:
COM_IN
PROC PUSH MOV IN TEST JE MOV IN RET ENDP
FAR DX DX, 03FDH AL, DX AL, 01 COM_IN1 DX, 03F8H AL, DX
11
I/O指令:
程序直接控制I/O方式,所用的指令是IN和OUT利用寄存 器AL或AX来完成任务。 IN AL,PORT; (AL) (PORT) IN AX,PORT; (AX) (PORT+1,PORT) IN AL,DX; (AL) ((DX)) IN AX,DX; (AX) ((DX)+1,(DX))
21
注意: ① 查询方式,规定了个设备的优先级: ② 查询过程中,浪费了CPU原本可执行大量指令的时间
第七章 应用篇-输入输出程序设计
1
在微机系统中,外设是以实现人机交互间通讯为目的 的一些机电设备;计算机系统通过硬件接口以及I/O控 制程序对外设进行控制,使其能协调、有效地完成输 入/输出工作。故在对外设的控制过程中,主机不可避 免地,要对设备接口进行联络和控制。因此能直接控 制硬件的汇编语言就成了编写高性能I/O程序最有效的 程序设计语言。本章将以一些常用的I/O设备为例,着 重讨论I/O程序设计的几种方法。
①DMA控制器向CPU发出HOLD信号请求使用总线; ②CPU发出响应信号HLDA给DMA控制器,并让出总线, DMA获得总线控制权; ③传输数据的存储器地址(在地址寄存器中)—通过 地址总线发出;
8
④传输的数据字节,通过数据总线传送; ⑤地址寄存器增1,字节计数器减1; ⑥如字节计数器非0=>转向③; ⑦DMA控制器撤消总线请求信号HOLD,传送结束。
5
③DMA方式(直接存储器存取方式):
主要由硬件DMA控制器实现其传送功能。
DMA控制器
存储器
I/O设备
6
DMA控制器接口一般包括四种寄存器:状态控制、数据 寄存器、地址寄存器和字节计数器。 这些寄存器能在信息传送之前进行初始化,每个字节 传送后,地址寄存器增1,字节计数器减1。
7
DMA方式的步骤如下:
INPUT:
IN TEST JZ CALL
AL,STAT1 AL,20H DEV2 FAR PTR PROC1
20
DEV2: DEV3: NO-INPUT:
IN TEXT JZ CALL IN TEST JZ CALL JMP
AL, STAT2 AL, 20H DEV3 FAR PTR PROC2 AL, STAT3 AL, 20H NO-INPUT FAR PTR PROC3 INPUT
12
OUT PORT,AL; (PORT)
(AL)
OUT PORT,AX; (PORT+1,PORT) (AL)
OUT DX,AL; ((DX))
(AL)
OUT DX,AX; ((DX)+1,(DX)) (AL)
如果端口地址是八位的,可采用直接寻址方式。 例: out 21h, al 如果端口地址是十六位的,则需采用间接寻址方式。 例: mov dx, 378h
9
I/O接口都有 ①状态寄存器 — 保存设备和接口的状态信息供CPU 对外设进行测试; ②数据寄存器 — 用作数据缓冲; ③命令寄存器 — 保存CPU发出的命令以控制接口和 设备。
10
每一个寄存器都分配有一个称为I/O端口的地址编码。 IBM PC机的I/O空间允许设置64K个8位端口(65535) 或32K(37768)个16位端口。 对不同型号的计算机及其接口,I/O端口的编码有时 不完全相同。
2
每种输入/输出设备都要通过一个硬件接口或控制器 和CPU相连:软盘←→软盘控制器←→CPU,终端显示 器数据接口CPU。
这些接口和控制器都能支持输入/输出指令IN,OUT与 外设交换信息-----包括控制、状态和数据三种不同 性质的信息,它们必须按不同的端口地址分别传送。
3
不同的I/O设备要求传送的数据类型也是不同的。如:终 端显示器交换的数据必须是ASCII码。
16
COM_OUT PROC FAR
PUSH DX
PUSH AX
MOV DX, 03FDH
COM_OUT: IN AL, DX
TEST AL, 20H
JE COM_OUT
POP AX
MOV DX, 03F8H
OUT DX, AL
POP DX
RET
COM_OUT
ENDP
17
注意:用TEST 指令对状态寄存器进行反复的测试查询等 待,在依据状态是否满足要求来确定是否进行数据的传送 查询方式(或等待方式):CPU对外设的状态不断检查直 到达到要求,再作数据的传送,当外设还未准备好以前, CUP就要等待,不能做别的操作
控制信息:输出到I/O接口,告诉接口和设备要做什么工 作。 状态信息:从接口输入,表示I/O设备当前的状态 数据信息:I/O设备和CPU真正要交换的信息。
4
IBM PC具有一系列简单而又灵活的输入/输出方式: ①用IN,OUT指令直接在端口级上处理输入/输出的程序 直接控制I/O的方式; ②中断的传送方式: