170 likes | 394 Views
第九章 BIOS 和 DOS 中断. 在存储器系统中,从地址 0FE000H 开始的 8KB ROM 中装有基本输入输出系统例行程序。 优点:利用 BIOS 功能编写的程序简洁、可读性强,而且易于移植。 磁盘操作系统 DOS 是 PC 机最重要的操作系统,有两个程序模块: IBMBIO.COM :输入输出设备处理程序。 IBMDOS.COM :包括一个文件管理程序和一些处理程序。 DOS 功能和 BIOS 功能都通过软件中断调用,其调用步骤: ( 1 )将调用的参数装入指定的寄存器 ( 2 )如需功能号,把它装入 AH
E N D
第九章 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处理程序把取得的扫描码转换成相应的字符码,大 部分键的字符码是一个标准的ASCII码。
转换成的字符码以及扫描码存储在ROM BIOS数据区的键盘缓冲区KB_BUFFER中. 0040: 001ABUFF _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)
0 × 79 0 × 0 24× 0 24 ×79 字符属性 显示器的屏幕通常划分为行和列的一个二维系统,显示适配器并在行和列组成的网格位置上显示字符。 例如:25行× 80列的屏幕 对应屏幕上的每个字符,在存储器中由连续的两个字节表示,一个字节保存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=串地址(‘$’结束标志)