第五章 输入 /输出与中断系统
I/O设备 是计算机系统必不可少的组成部分,I/O能力的强弱
是评价计算机系统性能优劣的重要指标。计算机系统通过 硬
件接口 和 I/O控制程序 对 I/O设备进行控制,使之协调、有效地
完成 I/O操作。
汇编语言可以 最直接、有效地 控制计算机的硬件和各种
I/O外设接口,所以是编写 高性能 I/O程序 的 最有效语言 之一。
在硬件和接口控制、数据实时采集、实时控制和处理方面,
汇编语言仍然有独到之处的优势。
本章学习计算机 中断系统 的有关概念、主要 外设接口 的
基本原理,接口的程序控制方法 以及 I/O程序设计 方法。
5.1 输入 /输出基础
包括,?I/O接口信息 ? 数据传送方式
? I/O端口寻址 ? 输入 /输出指令
5.1.1 I/O接口信息
每种 I/O外部设备都通过一个 硬件接口 和 CPU连接,计算
机系统通过 接口寄存器 与 I/O外部设备交换信息。接口中包含
了一组寄存器。
接口信息分为三类,
数据信息、状态信息、控制信息
不同性质的接口信息分别通过接口的 数据寄存器, 状
态寄存器 和 控制寄存器 进行传送。
( 1) 数据寄存器
存放外设和主机间传送的数据信息。
( 2) 状态 寄存器
保存外设当前状态信息。
例如,READY,EMPTY,BUSY,ACK等
利用 状态信息 实现主机与外设之间正确, 握手, —— 在
数据传送中,二者能配合协调工作 。
( 3) 控制寄存器
CPU通过控制寄存器给外设发送操作命令。
5.1.2 I/O寻址及端口地址分配
为便于访问,每个接口寄存器( 端口 )都分配了一个 惟
一的 地址编码,称为 I/O端口地址, 构成了一个 独立于存储
器的 I/O地址空间 。处理器用专门的 I/O指令 通过不同的端口
与不同的 I/O设备交换信息。
在 80X86处理器系列的计算机中,可寻址 64K个 8位 I/O端口
或 32K个 16位端口 。但实际上仅使用 CPU的 10位地址线 A0-A9
进行 I/O端口寻址,因此实际 最大可寻址 1024个 8位 I/O端口 或
512个 16位 I/O端口,端口地址范围为 0-3FFH。
如果端口地址大于 1024时,CPU将取该端口地址除以
1024的余数作为实际端口地址。
例,端口号 1025/1024的余数 = 1
因此使用 端口 1025等效于使用 端口 1
各种外部设备都有 固定 的 I/O端口地址,见教材 表 5-1 (p134)。
5.1.3 数据传送方式
可分为三种基本的数据传送方式:
( 1)程序直接控制的 I/O方式
?条件传送方式(查询方式)
计算机与外部设备可以完全同步操作, I/O设备状态总是
就绪的,CPU不用查询 I/O设备的状态,可直接进行数据传送。
处理器传送数据前,需要先 查询 I/O设备的状态,当 I/O设
备 准备就绪 时才进行数据传送,否则 处理器将等待 。 用于 高速
CPU与 低速 I/O设备 (键盘、显示器等 )之间同步协调工作。
?无条件传送方式
( 2)中断传送方式
( 3) DMA( Direct Memory Access)传送方式
根据 外设的中断请求 完成 I/O操作,优点,
? 避免查询外设状态等待 I/O设备就绪而耗费 CPU时间,
提高 CPU的利用率和计算机的运行效率。
?解决 CPU无法预测 I/O设备何时需要传送数据的问题。
当大量数据传输时,为避免 CPU干预,提高输入 /输出
效率,I/O设备直接与内存进行数据交换 。用于计算机与
高速 I/O设备 (如磁盘、磁带机等 )之间交换数据。
DMA方式的传送如 图 5.1所示,整个操作由硬件实现。
在一个 I/O应用程序中,数据传送方式往往不是单一的,
可能需要同时组合使用几种数据传送方式。
5.2 直接控制的 I/O程序设计
使用 I/O指令 在 端口级 直接由程序控制与外设进行数据传送 。
next
DMA控制器 向 CPU
发出使用总线的请求
CPU发出响应信号,将
总线控制权转让给 DMA
由数据总线传送一个字节
地址寄存器增 1
字节计数器减 1
DMA控制器撤消总线 请求信号
DMA传送结束
字节计数器 =0?


DMA传送操作流程
返回
5.2.1 输入 /输出指令
两条 I/O的指令,IN,OUT
可传送字节或字数据,并且可以对端口 直接寻址 或 间接寻址 。
( 1)输入指令
指令格式,IN ACC,PORT ;(ACC) ← ( PORT)
IN ACC,DX ;(ACC) ←( ( DX) )
ACC代表 AL或 AX寄存器,PORT是端口地址。
例, 从 n端口 读一个字节数据, 从 n+1和 n端口 读一个字数据:
IN AL,n ; (AL) ← (n)
IN AX,n ; (AX ) ← ( n+1,n)
例, 从 DX所指的 379H端口读一个字节数据 (间接端口寻址 ):
MOV DX,379H
IN AL,DX
( 2) 输出指令
指令格式,OUT PORT,ACC ;(PORT) ← ( ACC)
OUT DX,ACC ;( (DX) )← ( ACC)
例, 将 AL寄存器的字节数据传送到 DX所指的 378H端口,
MOV DX,378H
OUT DX,AL ; (( DX) )← ( AL)
如果端口地址 ?255,可用 直接端口寻址 或 间接端口寻址 ;
如果端口地址 >255,用 间接端口寻址 (端口地址存放 DX中 ) 。
判断下面指令的合法性:
IN AL,378H
IN BL,60H
OUT 378H,CH
?
?
?
例:检测设备是否出错 。
设某设备的 状态端口为 27H
错误状态位, D2=0,设备无错
D2=1,设备出错
IN AL,27H
TEST AL,00000100B
JNZ ERR
?
ERR:
MOV DX,378H
IN AL,DX
例 5-1(p137) 打印机 查询输出 子程序。
5.2.2.2 无条件传送 I/O程序设计
CPU不需要查询 外设状态,直接与外设进行数据传输。
声音是一种有效的人机通讯方式,以 PC机发声程序设计为例,
介绍无条件传送 I/O程序设计方法。
( 1) IBM PC机发声系统工作原理
系统的 定时器 /计数器 8253或 8254提供音频信号,通过可编
程 并行接口芯片 8255的 61H端口控制驱动电路,使扬声器发声。
发声系统工作原理如教材 (p137) 图 5.2所示。
5.2.2.1 条件传送 I/O程序设计
CPU需要不断地 访问, 查询 外设状态, 直到确认外设准
备就绪后, 才能进行输入 /输出 。
5.2.2 直接控制的 I/O程序设计
设计方法包括, ? 条件传送 ( 查询传送 )
?无条件传送
用户程序
DOS系统
功能调用
BIOS中断调用
硬件 /外部设备
输入 /输出接口
ROM BIOS,基本输入 /输出系统 ( Basic Input /Output System)
驻留在系统主板的 ROM中,提供了系统加电、引导装入、
主要的 I/O接口控制以及最基本的硬件和软件接口。
调用 BIOS功能 —— 称为 BIOS 中断调用,调用方法与 DOS系
统功能类似。 例如,键盘输入一个字符,MOV AH,0
INT 16H
返回
8284时钟
发生器
8253/8254
定时 /计数器
8255
并行接口芯片
7 1 0
与门 驱动器
1.19MHz方波
1
1
扬声驱动系统工作原理
61H端口,
D0=1 控制 8253 2号定时器输出指定频率的方波
D1=1 使扬声器的与门电路接通,并保持到 D1=0时断开。
61H端口
8255有三个数据寄存器,两个用于输入( 60H,62H端口 ),
一个用于输出( 61H端口 )。
8253有 3个定时器( 计数通道 ):
0号定时器 ( 40H端口 ) —— 时钟定时
1号定时器 ( 41H端口 ) —— 动态存储器刷新定时
2号定时器 ( 42H端口 ) —— 向扬声器发送指定频率的脉冲
43H端口 —— 8253的控制寄存器
( 2)通用发声程序设计
ROM BIOS中有一个 beep子程序,可根据 bl给出的 分频值
(时间计数值) 533H控制 8253的 2号 定时器 产生频率为 896Hz
的声音,用于, 加电自检, 时硬件错误报警。 依据这样一个事
实,可以找到计算 指定频率对应的 分频值 t 的公式:
所以 t = 533H * 896H / f
因为 533H 896Hz, t f
= 1234DCH / f
实现计算分频值的程序:
mov di,f ; f=指定频率
mov dx,12h
mov ax,34dch
div di 分频值 ( 商 ) 送 AX
mov bx,times ; times=延续时间计数
lp0,mov cx,9801H
lp1,loop lp1
dec bx
jnz lp0
时间延续,
设计发声子程序两个入口参数,发出指定频率的声音,并
延续一定时间,( di) = 给定频率
( bx) = 发声时间
通用发声程序完成的 三步基本操作,
?送 0B6H 8253/8254的 43H端口,设置工作方式。
?16位分频值 2号定时器 42H端口,使 2号定时器产生相
应频率的脉冲信号。
?61H端口 的 D0和 D1置 1,使扬声器发出指定频率的脉冲信号
并通过与门。
通用发声子程序见教材 例 5-2( p138)
( 3)简单的音乐程序设计
设计音乐程序需 定义两组数据,
音频频率表, 发声时间 (节拍 )表
如果从音频频率表和发声时间表中依次取出一对数据,作
为入口参数调用通用发声子程序,就可产生出乐曲。
乐曲每个 音符与音频频率间的对应关系 如 表 5-2 (p139)所示。
写一个主程序调用通用发声子程序,形成乐曲。 例 5-3( p139)
简谱:
| 5 3 5 3 | 5 3 1-| 2 4 3 2 | 5 - - -|
| 5 3 5 3 | 5 3 1-| 2 4 3 2 | 1 - - -|
| 2 2 4 4 | 3 2 5-| 2 4 3 2 | 5 - - -|
| 5 3 5 3 | 5 3 1-| 2 4 3 2 | 1 - - -|;频率表
mus_freq dw 3 dup( 784,660 ),524,588,698,660,588,784
dw 3 dup(784,660 ),524,588,698,660,588,524
dw 588,588,698,698,660,588,784,588,698,660
dw 588,784
dw 3 dup(784,660),524,588,698,660,588,524,-1;发声时间表
mus_time dw 4 dup( 6 dup (500),1000,4 dup(500),2000 )
粉刷匠
5.3 中断程序设计
中断传送方式是 CPU与外设之间通信的一种有效方法,避
免了 CPU反复查询状态、等待外设,提高了 CPU的利用率,也
提高了计算机 处理各种突发事件或外部事件 的能力。
5.3.1 有关中断的概念
中断,使 CPU暂时 中断 正执行的程序,去处理特殊事件的操作。
1) 外部设备中断处理过程概述
每当外部设备准备好传输数据时:
( 1) 向 CPU发出 中断请求 ;
( 2) CPU暂停执行当前的程序( 响应中断 );
( 3)转去执行输入 /输出操作( 中断服务 );
( 4)输入 /输出完成后返回原程序继续执行( 中断返回 )。
这样就提高了 CPU的利用率和计算机的运行效率。
除了外部设备,其他的异常事件 也会产生中断请求,不同
的中断请求来自不同的 中断源 。
中断源, 发出中断请求,引起 CPU中断的事件、来源。
80X86处理器的计算机系统有两大类中断源:
软件中断,由执行处理器指令引起的中断,也称 内部中断 。
硬件中断,由计算机故障、异常事件、外部设备的 I/O请求引
起的中断,也称 外部中断 。
中断优先级, 根据各中断源的重要性(轻重缓急)给中断请
求赋予的等级编号。当有多个中断请求发生时,按
中断优先级 顺序响应中断请求 。
?在计算机系统中,各中断源产生的中断请求是随机的,
CPU如何及时响应和处理各中断请求?
3) 中断响应和处理流程
2) IBM PC 的 中断源 ( P143 如图 5.5所示 )
中断优先级,内部中断 — >非屏蔽中断 — >可屏蔽中断 — >单步执行
CPU每执行完一条指令后 都要 检测 是否有 中断请求 产生。
8086/8088中断响应和处理流程 如图 5.6所示 。
80X86处理 256种类型 的中断,编号为 0~255,称为 中断类型号。
不同的中断类型号标识了不同的中断源。
5.3.2 可屏蔽中断 ( INTR)
中断控制器 Intel 8259A管理可屏蔽中断,一片 8259A中断
控制器管理 8级硬件中断,接收来自 8个独立设备的中断请求。
各级中断请求信号 IRQn所对应的外部设备 如图 5.7a所示 。
8259A有两个重要的寄存器:
中断屏蔽寄存器 ( 2l H ), 命令寄存器 ( 20H)
?中断屏蔽寄存器 ( 2l H ),
D7-D0位 分别对应硬件设备的 中断请求 IRQ7-IRQ0,是
相应设备的 中断许可位 。
0,允许 该位对应的设备发出中断请求 IRQn
1,禁止 该位对应的设备发出中断请求 IRQn。Dn位 =
7 6 5 4 3 2 1 0
IRQ7 ? ? ? IRQ1 IRQ0 中断请求
打印机 ? ?? 键盘 时钟
21H 例:仅允许键盘中断
MOV AL,0FDH
OUT 21H, AL
1 1 1 1 1 1 0 1
?命令寄存器 ( 20H)
一次硬件中断服务结束时,必须由 8259A中断控制器的
命令寄存器( 20H)发出中断结束命令( EOI=1),否则与
当前中断请求 同级 的或 更低级 的 中断请求 将 被当前正处理的
中断请求屏蔽,使其不能被处理器响应。
7 6 5 4 3 2 1 0
20H
EOI 位 = 1,发出中断结束命令
例:中断结束命令 EOI可以用下面几条指令发出:
mov al,20h ;准备 EOI命令
out 20h,al ;发送 EOI命令
0 0 1 0 0 0 0 0
要使 CPU能够地响应和处理某设备发出的中断请求, 必须:
?在 21H端口 将该设备的 中断许可位置 0,允许该设备发中断请求;
?设置中断标志位 IF=1,开中断,使 CPU能响应 该中断请求;
最后,中断处理结束时还须发出 EOI命令,清除该中断请求。
5.3.3 中断向量表
?当处理器接收到某个中断请求后,如何 快速找到 处理该中断
请求的 中断服务程序入口地址,以便 及时 地完成中断服务呢?
( 1) 中断向量法 —— 利用中断向量表和中断类型号快速找
到相应中断源的中断服务程序入口地址。
( 2) 每个 中断类型号 在中断向量表中都对应有一个 中断向量
中断向量 占用 4字节,
(前两个字节) = 存放 中断服务程序 入口地址的 偏移地址
(后两个字节) = 存放 中断服务程序 入口地址的 段地址
所以,中断向量表就是各个中断源的中断服务程序 入口地址表 。
( 3) 80X86能处理 256级中断向量,对应 256种 中断类型,中
断类型号为 0~FFH( 0~255),共占用 1024字节 。
计算机系统均采用 中断向量法 来解决这个问题。
中断向量表 中断服务程序入口地址中断类型号 next
中断向量表
(中断服务程序
入口地址表 )
00000H
00001H
003FFH
00002H
00003H
类型 0 对应的中断向量
类型 1
类型 255
( 中断服务程序入口 偏移地址 )
( 中断服务程序入口 段地址 )
( 中断服务程序入口 偏移地址 )
( 中断服务程序入口 段地址 )
……
各中断向量在表中 按中断类型号顺序存放,对应某中断类
型号的中断服务程序的入口地址可以按下面的方法获得:
(中断类型号 N× 4)=类型 N中断服务程序入口的偏移地址
(中断类型号 N× 4+2) =类型 N中断服务程序入口的段地址
返回
->(IP)
->(CS)
中断向量表
BIOS 数据区
系统文件 IO.SYS 和 MSDOS.SYS
COMMAND.COM 程序常驻区
用户区
COMMAND.COM 程序暂存区
00000H
003FFH
07FFFH
00400H
004FFH
64K 内存分配映像表
( 4) 中断向量表存放在地址为 0:0-0:3FFH的内存低端存储区
功能, ? 保护中断断点
? 按 中断类型号 N获取 中断服务程序入口地址 ->CS:IP
? 转移 到中断服务程序执行
( 5) 实现中断处理流程的两条重要指令,INT,IRET
? INT指令的操作
称为 软中断指令,处理器执行到该指令时,将 产生中断请求,
完成指定类型的 中断服务 。
格 式,INT N
操 作:
(SP)←(SP) -2,((SP)+1,(SP))←( FR)
(SP)←(SP) -2,((SP)+1,(SP))←( CS)
(SP)←(SP) -2,((SP)+1,(SP))←( IP)
(IP)← (N?4)
(CS)← (N?4+2)
FR,CS,IP入栈保护
中断服务程序入口地址 -> CS:IP
功能,返回到软中断指令的下一条指令(中断断点)继续执行,
实现中断返回。
使用 中断向量表 的优点:
? 可快 速找到中断服务程序 进行中断处理;
? 便于以用户中断服务程序 替换或扩展 原系统的中断服务程序。
利用中断向量表完成中断响应的流程如下,
(只需要将用户中断服务程序入口地址 填入 中断向量表中)
? IRET指令的操作
格式,IRET
操作,( IP)←((SP)+ 1,(SP)),(SP)←(SP)+ 2
(CS)←((SP)+ 1,(SP)),(SP)←(SP)+ 2
(FR)←((SP)+ 1,(SP)),(SP)←(SP)+ 2
恢复中断断点
中断响应处理流程
( IP)
(CS)
09H 中断服务程序
STI
?
IRET
CA80H:1923H
INT 09H
0号中断向量
1号中断向量
8号中断向量
1923
CA80
00000H
003FFH
?
?
00024H
00026H
IRQ1
MOV CX,30H
?
MOV AX,BX
?
( FR )
( CS ) 入栈
( IP )
09H?4=24H
( IP )
( CS ) 出栈
( FR )
5.3.4 中断程序设计
在中断程序设计中,有两个最基本和最重要的环节:
? 设置中断向量
? 编写用户 中断服务程序
( 1) 设置中断向量
设置中断向量表的方法主要有 两种,
? 直接 写向量表
? 利用 DOS系统功能调用 写向量表
1) 直接写中断向量表
用 MOV指令把用户中断服务程序的入口地址写入中断向量表 。
例,(P149) 设:
用户新中断服务程序,int_prog
中断类型号,N=1
BIOS和 DOS系统提供的中断服务功能及其中断类型分配见 表
5-3,表 5-4( P148), 应熟悉和应用这些系统资源 。
设置中断向量,
偏移地址 ->(N?4)=(0004H)
段地址 ->(N?4+2)=(0006H)
? 取中断向量
输入参数, AH=35H AL=中断类型号
返回参数,ES:BX=原中断向量
? 设置中断向量
输入参数,AH=25H AL=中断类型号
DS:DX=待设置的中断向量
返回参数:无
利用 DOS系统功能调用设置中断向量的例子见教材 ( P150)
2) 利用 DOS系统功能调用设置中断向量
在 DOS系统调用 ( INT 21H) 的功能中, 有两个功能可以很
方便地对中断向量表进行设置和存取 。
( 2 ) 中断程序的设计方法
利用系统支持的中断请求, 开发用户中断程序的途径:
?替换 原系统的中断服务程序
? 扩展 原系统中断服务程序
1) 驻留内存方式
中断程序由两部分组成,中断加载程序 和 中断服务程序 。
? 中断加载程序功能,
设置中断向量表, 执行 INT 27H( 利用 INT 21H DOS系统
调用的 31H功能 ), 将用户中断服务程序 驻留在内存, 然后
结束执行中断程序 。
? 中断服务程序功能:
当有中断发生时, 系统根据中断类型号和中断向量表找
到中断服务程序并执行, 用户中断服务程序完成中断处理 。
程序驻留内存的 DOS中断功能如下:
INT 27H 功能:程序驻留内存后返回 DOS
入口参数,DS:DX=程序驻留长度
出口参数:无
中断程序可分两种方式, 驻留内存和非驻留内存方式 。
2) 非驻留内存方式
中断程序 设置完中断向量 表后,在前台不断运行等待,直
到有中断请求发生,然后完成中断处理,返回 DOS系统。
驻留内存方式的中断程序基本设计步骤如下:
( 1)中断加载程序
取系统原中断向量并保存到内存变量中
关中断,设置 中断向量表
若处理可屏蔽中断请求,设置
8259A 21H的相应 中断许可位
开中断
用 INT 27H功能 驻留 用户的 中断服务程序
返回 DOS
( 2) 中断服务程序
教材例 5-5:( P152)编写一个用户中断服务程序来 扩展系统
的时钟中断(类型 8,每秒钟发出 18.2次中断请求 )的中
断服务程序功能。
开中断
保护现场
中断处理
若处理的是可屏蔽中断请求,发
出中断结束命令 EOI
恢复现场
中断返回
INT 10H( BIOS中断调用 ),
(AH)=7 ( 功能, 屏幕下卷 )
(AL)=下卷的行数
(BH)=下卷行的属性 ( 7为黑底白字 )
(CH,CL) =下卷的窗口区域的左上角坐标 ( 行, 列号 )
(DH,DL) =下卷的窗口区域的右下角坐标 ( 行, 列号 )
教材例 5-6,编写一中断程序, 要求主程序在运行时每隔 10
秒钟响铃一次, 同时屏幕上显示, This bell is ring!”的信息 。
此例特点,一个非驻留式中断程序
每发生一次时钟中断时, 系统将执行一次 1CH类型的中断
服务程序 。 利用 INT 1CH可完成某种 定时操作 。
5.4 键盘 I/O
IBM PC系列计算机的键盘是一个智能键盘, 键盘内有
一片 Intel 8048( 或 8049) 单片机 ( 处理器 ), 负责对整个
键盘上的字符键, 功能键, 控制键和组合键进行管理 。
敲键
8048 向 8259A发出 IRQ1中断请求
将所敲键的扫描码送 8255 60H端口
( IF=1)主机响应 IRQ1
调用 09中断类型服务程序,从 8255 60H
端口 接收扫描码 并转换为 ASCII码
键盘缓冲区
键盘中断响应流程
用户程序
利用 DOS功能调用
BIOS中断调用
5.4.1 扫描码和 ASCII码
当在键盘上,按下,或,放开,一个键时,如果这时允许
键盘发出中断请求并且 IF=1,就会产生 09H类型的硬件中断,
CPU将执行 INT 09H指令,转入 BIOS键盘中断服务程序处理用
户的键盘输入 。
60H输入端口:
D7=1 按键已 放开,称为 断码
D7=0 键已 按下,称为 通码, D6-D0位 是按键的 扫描码 。
键盘上的每一个键都对应 惟一的扫描码, 扫描码与键
盘按键对应关系如表 5-5所示。
5.4.2 BIOS和 DOS键盘中断功能
BIOS中断调用( INT 16H)和 DOS系统调用( INT 21H)
都提供了键盘中断功能,从键盘缓冲区获取键入字符的扫描
码或 ASCII码返回给用户应用程序。
BIOS键盘中断调用 INT 16H的主要功能如表 5-6所示。
教材例 5-7, 编写一热键捕捉程序,当程序运行后,在键盘
上键入 热键 Ctrl+F7时,屏幕上显示, This is Interrupt-
Program Working!”的信息。
本例特点,示范了 从 8255的 60H端口获取键盘扫描码 以及处
理 组合键 (捕捉热键) 的方法。
与 键盘有关的 DOS系统调用功能如 表 5-7所示。
5.5 显示器 I/O
显示器是计算机系统的基本显示设备。 显卡 VGA的色彩表现
能力、编程方便性和显示速度等性能都直接影响显示性能。
当前流行的都是高分辨率(分辨率为 1024× 768,1280× 1024
等) Super VGA显示器 。
本节主要介绍 VGA及其以上的 Super VGA显示器原理和基
本 I/O操作控制方法。
显示器任一时刻都必须工作在 某一显示模式下,显示模式
分为两大类,?文本模式 ?图形模式
5.5.1 文本显示模式 I/O
文本模式,由一屏所能显示字符的行、列数及字符属性确定。
例如,文本模式 3,80(列) × 25(行)彩色文本显示模式
显存 中保存着当前正显示的一整屏图像数据,VGA在 显存
与 屏幕 之间建立了一种自动映射关系,只要 向显存写入显示数
据,屏幕上将 立刻显示出字符或图形 。
实际上显存又被映射到主机系统的 一段内存地址空间 上,
这段内存地址空间称为 视频缓冲区 。
彩色文本模式下,视频缓冲区首地址为 B800:0000H。
程序 读写视频缓冲区,就等效于 读写显存 。
屏幕上每个显示字符都对应 视频缓冲区 中的 两个字节单元,
?第一个单元存显示字符的 ASCII码
? 第二个单元存该显示字符的 属性
分辨率越高的显示模式需占用的视频缓冲区存储空间越大。
1) 字符属性
字符的属性确定了该字符的显示方式:显示 字符的颜色,
背景颜色 及是否 闪烁、高亮度 。
next
对于 文本模式 3,全屏幕有 2000字符,需占用视频缓冲区
存储空间 4000字节 。
返回
例 2:采用 文本模式 3在全屏幕上显示 闪烁的蓝底红色字符 ?A?,
其属性字节为,94H
彩色文本模式的 RGB颜色组合如表 5-8所示。
例 1,闪烁的蓝底红色字符 属性字节,94H=(10010100)2
VGA编程方法:
( 1)直接读写视频存储器
( 2)利用 BIOS中的视频中断调用功能( INT 10H)
( 3)对 VGA的寄存器操作 +读写视频缓冲区
其中,
方法( 1)速度快,可利用 Super VGA的扩展性能
方法( 2)方便、简单,但时间开销较大
方法( 3)速度快,操作更低层,要求对硬件熟悉
2 ) 彩色文本模式的 BIOS中断调用
BIOS中的 显示中断调用 INT 10H有大部分功能是处理文本显
示。计算机开机或热启动时,初始模式 是彩色 文本模式 3。
INT 10H的彩色文本功能如表 5-9所示。
例 5-8 在屏上建立一个 21列宽,9行高 的窗口,将键盘输入的
字符在窗口中显示出来,键入 Ctrl+C键时结束程序运行。
表 5-10 是 DOS系统功能调用 INT 21H中的部分文本显示功能。
用 直接写视频缓冲区 的方法完成上述功能:
mov ax,0b800h
mov es,ax
mov di,0 ;视频缓冲区偏移地址送 di
mov cx,2000 ;一屏显示字符的个数送 cx
mov ah,10010100b ;显示属性:闪烁,蓝底红字
mov al,?A? ;显示字符 ?A?
rep stosw ;字符 ?A?显示到屏幕上
mov ah,00000111b ;清屏
ov al,? ?
5.5.2 图形显示模式 I/O
本节讨论有关显示器图形显示模式的基本概念、基本原理、
图形显示技术及其程序设计方法。
1)图形显示模式
图形模式:利用显示屏上的 像素点 来构成图形或图像。
主机 —— > 显卡 —— >显示器 —— >
数字信号 模拟信号 模拟信号
为减少显存需求量,VGA采用了一种 间接色彩模式 (假彩色),
R ( 6位) G ( 6位) B ( 6位)
0
1
2
?
6
6
6
?
6
6
6
?
6
6
6
?
颜色索引值
显存中只存各颜色在 色彩查找表 中的 颜色索引值,由颜色索
引值在色彩查找表中确定像素点的颜色,使显存空间大大减少。
色彩查找表( 18位 RGB值)
随着技术发展,现在 VGA又采用了直接用 RGB三基色亮
度值确定像素点颜色的 直接色彩模式,
( 1) 高彩色模式,用 15位或 16位定义一个像素点颜色的模式。
每个基色亮度值占 5位或 6位:
有 32级或 64级亮度值,可表示 32K或 64K种颜色。
( 2) 真 彩色模式,用 24位定义一个像素点颜色的模式。
每个基色亮度值用 8位表示:
有 256级亮度值,可表示 16M种颜色。
真彩色模式 已达到显示器色彩表现能力的极限。
一种图形模式 一般表示为:
水平像素点数 ?垂直像素点数 ?色彩模式
每种显示模式都有一定的显存空间需求量,计算公式为:
显存空间需求量 =
水平像素点数 ?垂直像素点数 ?每个像素值占用的二进制位数
显存所映射的视频缓冲区地址空间为
A000H:0000H~A000H:FFFFH
VGA采用了位面技术和显存分页机制来解决上述问题:
例如,标准 VGA的显示模式 12H表示为,640?480?16C
640× 480× 4(Bit)=153KB
视频缓冲区空间仅仅为 64KB,而 12H模式(分辨率低)的
显存需求空间就已 远超过 64KB,这就产生了地址空间的矛盾。
( 1)彩色位面法 ( 只用于 VGA的 16色模式 )
VGA将多段大小为 64KB的显存同时映射到一个 64KB的视
频地址空间,每段 64KB的显存区称为一个位面,每一个位面
用来提供一个二进制像素点颜色值的一位,所以显示屏上的像
素点的颜色由几个位面的值共同确定 。
如何通过 小小的视频缓冲区 地址空间访问到 整个显存 呢?
彩色位面法
1 0 1 0 1 1 0 1
0 1 1 0 1 1 0 0
1 1 0 0 1 1 0 1
0 0 1 1 0 0 1 1
0位面 ( 64 k)
0101 品红
0110 棕色
?
?
?
?
1位面
2位面
3位面
A000:0H
A000:0H
A000:0H
A000:0H
屏幕
显存
( 2)压缩像素法 (主要用于 256色 的显示模式)
每个像素值用 8位表示,取值 0-255,可以表示 256种颜色。
每个像素值占用一个字节,并且按字节连续存放,所以视频
缓冲区中的一个字节对应显示屏上的一个像素点。
例,VGA 13H模式 ( 320× 200× 256色 ) 的直接写像点子程序 。
入口参数,AX=行坐标, BX=列坐标, CH=颜色值 ( 像素值 )
vga_color256 proc near
mov dx,0a000h
mov es,dx
mov dx,320
mul dx
add ax,bx
mov di,ax
mov es:[di],ch
ret
vga_color256 endp next
显存分页
1 0 1 0 1 1 0 1
0 1 1 0 1 1 0 0
1 1 0 0 1 1 0 1
0 0 1 1 0 0 1 1
0页 ( 64 k)?
?
?
?
1页
2页
A000:0H
显存
?
0页
1页
2页
?
压缩像素法
返回
2) BIOS图形功能调用
在 BIOS的 INT 10H中断调用中的图形显示功能,使用简
单方便,当分辨率较高时也不用考虑换页操作,具体功能如
表 5-12所示 。
例 5-10 利用 BIOS的图形功能,按 13H( 320× 200× 256C)
显示模式在屏幕上绘出 256色的彩条。
5.6 打印机 I/O
打印机接口是一个 并行接口,一次可以从处理器接收 8位数
据。 IBM PC系列机使用的打印机接口符合 CENTRONICS接
口标准,凡是符合这种接口标准的外部设备,都可以连接到
打印接口上。
5.6.1 打印中断调用
BIOS中的 INT 17H打印中断调用用于实现计算机的打印
功能,如表 5-13所示。
5.6.2 打印机控制符与状态字节
通用的打印机标准控制符,如表 5-14所示。
例 5-11 编写一个打印机输出程序,要求从键盘上接收字符显
示到屏幕上,当回车或输入够 80个字符时,将字符串送
打印机打印输出,按 Esc键则结束程序执行。
打印字符, MOV AH,0
MOV AL,?A?
MOV DX,0
INT 17H
5.7 磁盘文件 I/O
应用程序都需要磁盘文件 I/O操作,MS-DOS系统提供了一组
磁盘文件存取功能,供应用程序调用以完成磁盘文件读写操作。
磁盘文件操作分两种方式:
?文件控制块( File Control Block)磁盘存取方式
?文件代号磁盘存取方式
5.7.1 文件控制块( FCB)磁盘存取方式
文件控制块是用户程序专门开辟的一块内存区域,作为用
户程序与操作系统之间传递有关磁盘文件操作信息的存储区。
在这种文件操作方式下,用户程序必须定义:
(1) 文件控制块 FCB(存文件名、驱动器号、记录长度等信息)
(2) 程序与磁盘交换数据的数据传输区 ( Disk Transfer Area DTA )
程序 DTA 盘文件写数据 DOS调用
FCB
盘文件 DTA 程序读数据DOS调用FCB
在 FCB方式下的文件操作,关键是正确定义 FCB 及 DTA,
然后调用一系列 DOS 功能调用完成磁盘文件操作。
2) FCB磁盘文件存取系统调用
先了解 FCB下的 DOS文件组织结构,
块 0 块 1 块 2 ? 块 n文件:
记录 0 记录 1 记录 2 ? 记录 m块:
字节 0 字节 1 字节 2 ? 字节 k记录:
文件由块组成,块由记录组成,记录由字节组成。文
件操作的 最小单位是记录 。
一个标准的 FCB大小为 37字节,扩展的 FCB大小为 44字节。
标准的 FCB数据结构定义如 表 5-15所示。
有关 FCB磁盘文件存取操作的 DOS系统 调用如表 5-16所示。
1) FCB的结构
建立文件,
mov ah,16h
lea dx,my_fcb ;文件控制块为 my_fcb
int 21h
设置 DTA:
mov ah,1Ah
lea dx,buf ; DTA地址为 buf
int 21h
顺序写文件,
mov ah,15h
lea dx,my_fcb
int 21h
使用 FCB磁盘文件存取系统调用,
例 5-12 顺序写磁盘文件。编写一个程序,把键盘输入的字
符顺序写入磁盘文件 mydata.txt中,回车结束程序执行。
5.7.2 文件代号磁盘文件存取方式
MS-DOS 2.0以上的版本为了支持 DOS的层次结构和树型
目录结构,增加了文件代号磁盘文件存取方式,这是普遍使用
的一种文件存取方式。
特点如下:
( 1)不再采用文件控制块 FCB,操作方便 ;
( 2)文件名(含路径)用一个简单的文件代号表示,按文件
代号进行文件操作 ;
( 3)最小的数据读写单位是字节,读写文件的方式灵活;
( 4)文件代号存取方式对各种操作错误采用了统一的编码,
便于处理错误。
注意:在文件代号方式下,文件名的形式为 ASCIZ串,
路径名 +文件名 +0
例如,file db ?d:\test\samples.dat?,0
3) 文件属性
文件属性字节各位定义如图 5.26所示。
MS-DOS为文件代号方式存取磁盘文件提供了一系列的
系统调用功能,常用的 DOS系统调用如表 5-17所示。
2) 文件代号存取系统调用功能
文件代号 ( 0-4) 由 DOS预分配给了系统的标准 I/O设备:
0— 标准输入设备 ( 键盘 )
1— 标准输出设备 ( 显示器 )
2— 标准错误输出设备 ( 显示器 )
3— 标准辅助设备 ( AUX)
4— 标准打印设备( PRN)
1) 文件代号
在文件代号存取方式中,按 文件代号 操作文件。文件代号
是打开文件或创建文件时由 DOS分配的一个 16位无符号数,通
过 AX返回给用户程序 。
用文件代号方式存取文件的步骤:
( 1)用文件名 ASCIZ串打开或建立文件;
( 2)保存系统返回的文件代号;
( 3)按文件代号进行文件操作
( 4)关闭文件
fname db ?text.dat?,0
handle dw 0
?
mov dx,fname
mov cx,20h
mov ah,3ch
int 21h
jc error
mov handle,ax ;保存文件代号
?error:
例:建立文件
例 5-14 用文件代号磁盘存取方式和直接写屏技术实现屏幕
整屏文本的保存与恢复。
小 结
本章要求:
( 1) 掌握 程序直接控制 I/O程序设计方法,会用 IN和
OUT指令 直接在端口级与外设交换信息,会写查询
方式和无条件方式的 I/O程序。
( 2)理解 有关中断 的各种概念,重点是中断源、中
断请求、中断类型号、中断向量表、中断处理流程、
软中断指令、可屏蔽中断、中断返回等概念。
( 3)掌握 BIOS中断调用 和 DOS系统 提供的 中断服务
功能 。
( 4)会用 INT 10H BIOS中断调用 和 直接写视频缓冲
区 的方法显示文本信息或图形。
小 结 (续)
本章要求:
( 4)熟悉 键盘中断响应流程,会捕捉热键。
( 5)了解 文件控制块 FCB 的文件操作方法,熟练掌
握 文件代号方式 的文件操作方法。
认真复习,融会贯通
GOTO 第六章