第九章BIOS和DOS中断

Download Report

Transcript 第九章BIOS和DOS中断

第九章 BIOS和DOS中断
 在存储器系统中,从地址0FE000H开始的8KBROM中装有基本输
入输出系统例行程序。
优点:利用BIOS功能编写的程序简洁、可读性强,而且易于移植。
 磁盘操作系统DOS是PC机最重要的操作系统,有两个程序模块:
IBMBIO.COM:输入输出设备处理程序。
IBMDOS.COM:包括一个文件管理程序和一些处理程序。
 DOS功能和BIOS功能都通过软件中断调用,其调用步骤:
(1)将调用的参数装入指定的寄存器
(2)如需功能号,把它装入AH
(3)如需子功能号,把它装入AL
(4)按中断号调用DOS和BIOS中断
(5)检查返回参数是否正确
9.1
键盘I/O
键盘是计算机最基本的一种输入设备,用来输入信息,以
达到人机对话的目的。主要由三种基本类型键组成:
 字符数字键:A~Z、a~z、0~9、%、#、$ 等
 扩展功能键:如Home、End、Backspace、Delete、Insert
、PgUp、PgD以及程序功能键F1~F10等
 和其他键组合使用的控制键:如Alt、Ctrl、Shift等
注意:字符数字键给计算机传送一个ASCII码字符,而扩展功
能键产生一个动作。
键盘和主机通过五芯电缆连接,五根线分别是:电源线、
地线、复位线、键盘数据线、键盘时钟线。
扫描码
当在键盘上“按下”或“放开”一个键时,如果键盘中
断是
允许的(21H的端口第一位是0),就会产生一个类型为9的
中断,并转入到BIOS的键盘中断处理程序。
该处理程序从8255可编程外围接口芯片的输入端口60H
读取一个字节。
字节的低七位:扫描码
字节的最高位:0:表示“按下”状态,该字节称为通码
1:表示“放开”状态,该字节称为段码
字符码
BIOS处理程序把取得的扫描码转换成相应的字符码,大
转换成的字符码以及扫描码存储在ROM BIOS数据区
的键盘缓冲区KB_BUFFER中.
0040: 001A
BUFF _HEAD
DW
?
0040: 001C
BUFF _TAIL
DW
?
0040: 001E
KB _BUFFER
DW
16 DUP (?)
0040: 003E
KB _BUFFER _END LABEL
WORD
注意:该缓冲区是一个先进先出的循环队列,BUFF
_HEAD和BUFF _TAIL是缓冲区的两个地址指针。
当这两个地址指针相等时,说明缓冲区是空。
当缓冲区已满又按下一个键时,BIOS不处理这个键
,并发出“嘀”的声音。
BIOS键盘中断(INT 16H)
AH=0:从键盘读一个字符
返回参数:AL=字符码
AH=扫描码
AH=1:读数据缓冲区的字符
返回参数:当ZF=0时
AL=字符码
AH=扫描码
当ZF=1时
缓冲区空
AH=2:读键盘状态字节
返回参数:AL=键盘状态字节
DOS键盘功能调用 (INT 21H)
单字符输入
AH=1:键盘输入并回显(可用ctrl+c或ctrl+break自动退出)
AH=8 : 不回显键盘输入(可用ctrl+c或ctrl+break自动退出)
AH=7:直接键盘输入
(不支持ctrl+c或ctrl+break退出,也不回显)
入口参数:无
出口参数:AL=输入字符的ASCII码
AH=6:直接读写控制台
(DL)=00H~0FEH时,请求输出字符
(DL)=0FFH时,请求读键盘字符
输入字符串
AH=0AH:从键盘输入一串字符并把它存入用户定义的缓冲区中
缓冲区:第一个字节保存最大字符数(由用户给出)
第二个字节保存实际输入字符数(由计算机自动填入)
之后的字节存放字符串(包括结束标志回车在内)
缓冲区的长度 = 最大字符数 + 2
检验键盘状态
AH=0BH:检验键盘是否被按动,若按动,AL=0FFH
否则,AL=00H
清除键盘缓冲区
AH=0CH:清除键盘缓冲区,然后执行AL中指定的功能。
AL=1、6、7、8或0AH
例: MOV
AH,0CH
MOV
AL,08H
INT
21H
优点:可以避免由于偶然超前输入的字符而出现的错误。
9.2
显示器I/O
显示器通过显示适配器与PC机连接,显示器可以简单的
分成单色显示器和彩色显示器。
显示适配器也称为显示卡,可分为:
单色显示适配器(MDA)
彩色图形适配器(CGA)
增强型图形适配器(EGA)
视频图形阵列适配器(VGA)
字符属性
显示器的屏幕通常划分为行和列的一个二维系统,显示
适配器并在行和列组成的网格位置上显示字符。
例如:25行× 80列的屏幕
0×0
24× 0
0 × 79
24 ×79
对应屏幕上的每个字符,在存储器中由连续的两个字
节表示,一个字节保存ASCII码,另一个字节保存字符的
属性。
字符显示
单色字符显示:字符的属性定义了字符的显示特征。
彩色字符显示:属性字节能够选择前景(显示的字符)和背景
的颜色。
显示存储器(显存)
对于所有的显示适配器,文本方式下显示字符的原理都是
一样的,所不同的是各种适配器的视频显示存储器的起始地址
不同:
MDA显存的起始地址为:B000H:0000H
CGA、EGA、VGA显存的起始地址为B800H:0000H
屏幕上某一字符位置在显存中的偏移地址为:
Char_offset = page_offset + ( (row × width) +column) × byte
其中: Char_offset 是在显存中的偏移地址
page_offset 是页偏移地址
row 是行号
column是列号
width是每行可显示的字符数
byte在显存中表示每个字符所用的字节数
例9.7
VIDEO
MACRO
WIDTH,PAGE _NUM
PUSH
AX
MOV
AL,WIDTH
MUL
DH
XOR
DH,DH
ADD
AX,DX
SHL
AX,1
ADD
AX,PAGE_NUM*1000H
MOV
DI,AX
POP
AX
ENDM
BIOS显示中断(INT 10H)
控制光标
AH=1:控制光标的行的开始和结束,控制光标的显现和关闭
(CH)0~3 = 光标开始行 (CH)4 = 1: 光标关闭
(CL)0~3 = 光标结束行
(CH)4 = 0: 光标显现
AH=2:设置光标的位置。
(BH)=页号
(DH)=行号
(DL)=列号
读光标位置
AH=3:读光标的位置,页好必须在BH中指定。
(DH)= 行号
(CH)=光标开始行
(DL)=列号
(CL)=光标结束行
清屏和卷屏
AH=6:使屏幕内容上卷指定的行。
AH=7:使屏幕内容下卷指定的行。
字符显示
AH=09H:把一个字符及其属性送到显示屏幕,然后光标返
回到它的初始位置。
AH=0AH:只把字符送到显示屏幕,然后光标返回到它的
初始位置。
AH=08H:可读取当前光标位置的字符及其属性。
彩色和字符串显示
AH=09H:显示彩色字符时,BL中设置的数据应为前景和
背景属性值。
AH=13H:显示字符串有4种方式:
AL=0或1,必须指定整个显示字符串的属性。
AL=2或3,必须指定每个字符的属性。
DOS显示功能调用(INT
21H)
AH=2:显示一个字符(检验Ctrl+Beak)
入口参数:DL=字符
AH=6:显示一个字符(不检验Ctrl+Beak)
入口参数:DL=字符
AH=9:显示字符串
入口参数:DS:DX=串地址(‘$’结束标志)