(整理)《80x86汇编语言程序设计》教案及答案. 联系客服

发布时间 : 星期一 文章(整理)《80x86汇编语言程序设计》教案及答案.更新完毕开始阅读2133fbcf590216fc700abb68a98271fe900eaff9

精品文档

第 9 章 BIOS和DOS中断

【教学目的】

本章内容是汇编语言程序设计的基本方法,通过本章学习,掌握在输入输出程序设计中大量使用的中断功能调用基本方法和具体应用、DOS基本I/O功能调用、常用BIOS功能调用。 【重点难点】

DOS基本I/O功能调用、常用BIOS功能调用,单个字符或字符串的输入输出功能调用。 【课 时 数】

3学时。

1. BIOS:Basic Input/Output System。在存储器系统中,从地址FE000H到FFFFFH的8KB ROM中装有BIOS例行程序。它提供了系统加电自检、引导装入、主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。

2. DOS:Disk Operating System。由软盘或硬盘提供。它的三个模块中的两个模块与汇编程序设计密切相关。

(1). IBMBIO.COM:输入/输出设备处理程序。它提供了DOS到ROM BIOS的低级接口。

(2). IBMDOS.COM:一个文件管理程序和一些处理程序。它比IBMBIO.COM又高了一级。关系图如

下:

用户 高 级 低 级 ROM

DOS DOS 对I/O的 BIOS 外设 IBMDOS.COM IBMBIO.COM 程序请求 3. BIOS和DOS功能调用的不同点

(1). BIOS能处理几乎所有的I/O (只有发声等极少数不能处理)。它直接用输入/输出指令同端口打交

道。

(2). DOS能处理大多数I/O。它是通过调用BIOS来同端口打交道的。级别高,使用方便,程序移植

性好。但处理的数量少于BIOS。 4. IBM PC系统主要的中断类型

(1). BIOS中断类型:见书第316页表9.1。

1). CPU中断类型:0~7

2). 8259A中断类型:8~0FH

3). BIOS中断类型:10~19H,40H 4). 用户应用程序:1BH,1CH,4AH

5). 数据表指针:1DH,1EH,1FH,41H,46H

(2). DOS中断类型:见书第316页表9.2。20~2FH,30~3FH保留给DOS。

5. DOS功能和BIOS功能都通过软件中断调用。调用DOS或BIOS功能时,有以下几个基本步骤: (1). 将调用参数装入指定的寄存器中; (2). 如需功能号,把它装入AH; (3). 如需子功能号,把它装入AL; (4). 按中断号调用DOS或BIOS中断; (5). 检查返回参数是否正确。

9.1 键盘I/O

1. 键盘是计算机最基本的一种输入设备,用以输入信息,以达到人机对话的目的。 2. 键盘提供了三种基本类型的键

(1). 字符键:传送一个ASCII码字符给计算机。如A~Z,0~9,%,$ 等。 (2). 扩展功能键:产生一个动作。如Home,End,Enter等。

(3). 组合功能键:改变其它键所产生的字符码。如Alt,Ctrl,Shift等。 9.1.1 字符码与扫描码

1. BIOS的键盘中断:当8259A的21H端口第1位(D1)为0,就允许键盘中断,在键盘上“按下”或“放精品文档

精品文档

开”一个键时都会产生一个类型号为9的中断。并转入BIOS的键盘中断处理程序。

2. 扫描码:键盘中断处理程序从8255的60H端口读取一个字节,该字节的低7位就是键的扫描码。键盘上的每一个键对应一个扫描码,从01H~51H。 (1). 通码:“按下”时取得的字节为通码,D7位=0。 (2). 断码:“放开”时取得的字节为断码,D7位=1。

3. 字符码:BIOS键盘处理程序将所取得的扫描码转换成相应的字符码。大部分键的字符码为ASCII码,没有ASCII码的键其字符码为0或一个指定的操作(如屏幕打印等)。

4. BIOS数据区的键盘缓冲区KB_BUFFER :一个先进先出(FIFO)并具有双指针的循环队列。存放转换成的字符码和扫描码(扫描码存放在字的高8位上)。当CPU想要得到键盘输入时,就调用BIOS键盘例行程序,它按其接收时的次序从缓冲区取出字符和扫描码,回送给CPU。键盘缓冲区结构如下:

0040:001A BUFF_HEAD DW ? ;键盘缓冲区的首地址指针 0040:001C BUFF_TAIL DW ? ;键盘缓冲区的末地址指针 0040:001E KB_BUFFER DW 16 DUP (?) ;16个输入量的空间 0040:003E KB_BUFFER_END LABEL WORD 9.1.2 BIOS键盘中断:INT 16H调用(从键盘缓冲区输入)。

1. AH=0:从键盘读一字符。此时一直要等到键盘缓冲区有输入才返回。返回时AL=字符码,AH=扫描码。

2. AH=1:读键盘缓冲区的字符。如ZF=1则键盘缓冲区空;ZF=0则AL=字符码,AH=扫描码。 3. AH=2:取键盘状态字节。AL=键盘状态字节(KB_FLAG:0040:0017H单元)。 (1). 键盘状态字节KB_FLAG:内存的

KB_FLAG:0040:0017H单元 0040:0017H单元,由类型 9的硬

D7 D6 D5 D4 D3 D2 D1 D0 件键盘中断置入键盘的对应状态

1=按下右移键Right Shift

到该单元。低4位是Alt、Ctrl、Shift

1=按下左移键Left Shift

左、Shift右的标志位,这4位在相

1=按下控制键Ctrl

应键按下时置位,该键一抬起即复

1=按下交替键Alt

位。KB–FLAG的高4位是Ins、

1=Scroll Lock状态已变换

Caps Lock、Num Lock、Scroll Lock

1=Num Lock状态已变换

键的标志位,这些位在相应键奇次

1=Caps Lock状态已变换 按下时置位,偶次按下时复位。具

1=Insert状态已变换 体含义如右:

(2). 键盘的其它标志区:

1). KB–FLAG1:0040:0018H单元如右。Ins' Caps' Num' Scroo' Hold

其中的高4位是Ins、Caps Lock、Num Lock、Scroll Lock锁定功能键的动态(临时)标志位,即这些键按下时该位置1,键释放即被置0。这4位动态标志位用于对这些键本身进行处理,而KB–FLAG中的这4位静态标志位反映了它们的锁定状态,用于控制其它键的键意确认。KB–FLAG1中的D3位为Hold–State保持状态位,Ctrl+Num键按下时该位置1;非Num键的任一键按下就使其复位。暂停过程就是将该位置1后进入一个无限循环过程,判断该位是否变为“0”,一但为“0”,即退出循环。

2). ALT–INPUT:0040:0019H单元。此单元不是标志单元,而是寄存单元。在按着Alt键不释放的条件下,连续按下小键盘(右区)的数字键×××(1~255)时,此1~3位的十进制数的二进制编码即在此生成。当Alt键释放时,第一字节为ALT–INPUT单元中的代码、第二字节为00H的两个字节存入键盘缓冲区,ALT–INPUT单元又被清0。若打入的数字键大于255数值,则以256为模产生结果。这是一种直接在键盘缓冲区建立所期望的ASCII代码的一种方法,第二字节为00H就与其它键所建立的ASCII代码相区别。

3). BIOS–BREAK:0040:0071H单元。此单元是中止或称为间断标志单元。Ctrl+Scroll键按下时,该标志字节置为80H,否则为00H,Ctrl+Scroll键的按下还清除键盘缓冲区,并以两个全0字节为其ASCII码,存入键盘缓冲区。此标志和特征码均可被其他软件用来证实“间断”键的按下。但是ROM–BIOS并不直接提供间断功能,在键盘中断服务程序中,对该组合键的按下提供了一条INT 1BH指令。在ROM–BIOS中类型1BH中断的服务程序只是一条中断返回指令IRET,其它什么都不做。其它软件只需将其“间断”功能程序的入口地址重新写入中断向量表的1BH×4的位置中去即可。因而即对其它软件提供了查询处理的方便,也提供了中断处精品文档

精品文档

理的方便,用以实施“间断”功能。

4). RESET–FLAG:0040:0072H单元。是两字节的复位标志。当Ctrl+Alt+Del组合键按下时,就以1234H代码填入,然后转移到复位初始化程序,这就是热启动复位。

5). Shift+Prtsc组合键:是打印屏幕的特殊操作。按下时由键盘中断服务程序执行软件中断指令INT 5产生的。这个组合键既不向键盘缓冲区存代码,也不建立标志,但是INT 5软件中断服务程序使用STATUS–BYTE标志单元(0050:0000),使在打印屏幕过程中再按下Shift+Prtsc键将不被理睬。 9.1.3 DOS键盘功能调用:(用BIOS键盘缓冲区输入)设置AH,执行INT 21H的DOS功能调用实现从

键盘输入字符。 1. 单字符输入:输入的字符在AL寄存器中返回。

(1). AH=1:从键盘输入一个字符并回显在屏幕上,并检验是否按下了Ctrl_Break键,如按下则自动

调用INT 23H并结束程序。返回时AL=字符。

(2). AH=6:读键盘字符,入口时DL=0FFH。如果准备好,AL=字符,未准备好,AL=0。

(3). AH=7:从键盘输入一个字符不回显,也不检验是否按下了Ctrl_Break键。返回时AL=字符。 (4). AH=8:除不回显以外,同功能1。

(5). 注意:若要求程序能接收功能键及具有键扩展码的组合键必须进行两次DOS功能调用,第一次

回送00,第二次回送扫描码。

2. 输入字符串:AH=0AH。从键盘输入一串字符并存入用户定义的缓冲区中(DS:DX=缓冲区首地址)。 (1). 缓冲区的第一字节给出能输入的最大字符数。由用户程序给出。如右: BUF DB 50

DB ? (2). 第二字节为调用后实际输入的字符数。由功能0AH调用填入,不含回

DB 50 DUP(?) 车符。

(3). 第三字节开始为调用后实际输入的字符串。由功能0AH填入,不含回车符。 (4). DOS调用后,保持DS:DX=缓冲区首地址不变。

3. 清除键盘缓冲区:AH=0CH。清除后并再调用一种键盘功能。被调用的键盘功能号(只能是1、6、7、8、0AH)作为入口信息放在AL寄存器中。

4. 检验键盘状态:AH=0BH。返回时AL=0FFH表示有键入,AL=00则无键入。返回后执行下一条指令。

9.2 显示器I/O

1. 显示器适配器:用于计算机和显示器连接的接口电路板,也称为显示卡。在IBM PC中有单色显示及并行打印机适配器,彩色图形监视器适配器两种。

2. 象素:80列25行共2000个网格的位置为象素。每个象素可显示一个字符,且在存储器中都有一个字映像。屏幕行号为0~24(0~18H),列号为0~79(0~4FH)。 D7 D6 D5 D4 D3 D2 D1 D0 3. 属性:对应显示屏上的每个字符在存储器中由连续的两个字节 表示,一个低字节表示字符的ASCII码,另一个高字节保存字背景 前景 符的属性。 000=黑,111=白 000=黑,111=白 4. 文本方式:在屏幕上处理字母、数字以及一些字符图形称为文闪烁BL 亮度I 本方式。 0=正常显示 0=正常亮度

1=闪烁显示 1=加强亮度 9.2.1 字符属性

R G B I R G B 1. 单色字符显示:单色显示属性字节如右上图: BL 2. 彩色字符显示:彩色显示属性字节如右下图。 3. 显示存储器:屏幕上某一字符位置在显示存储闪烁 背景 前景 器(又称为显存)中的偏移地址可由下列公式算出:

Char_offset=Page_offset+((row×width)+column)×byte

其中Page_offset是页偏移地址,width是每行可显示的字符数,在25×80的字符显示方式下,width=80,byte是表示一个字符所用的字节数,在字符显示方式下byte=2,row和column是相对于屏幕左上角位置(0,0)的行列坐标。 9.2.2 BIOS显示中断:INT 10H的0~0FH及13H共17个功能。部分见书第328页的表9.8所示。 1. 控制光标:光标不是ASCII字符,它由硬件产生和控制。

(1). AH=1:控制光标行的开始(CH的低4位)和结束(CL的低4位) (即大小),显示光标(CH4=0)和关精品文档

精品文档

闭(CH4=1)。

(2). AH=2:设置光标位置。DH=行号,DL=列号,BH=页号。对单显BH=0。

2. 读光标位置:AH=3,读光标位置。BH=页号。出口信息为DH=行号,DL=列号;CH和CL中的低4位为光标大小。

3. 选择显示页:AH=5,AL=页号。可由程序确定显存中的显示区域。 4. 清屏和卷屏

(1). AH=6:使屏幕内容或窗口内容上卷指定的行。该功能需设置7个入口参数,AL=0时清屏或清

窗口。

(2). AH=7:使屏幕内容或窗口内容下卷指定的行。该功能需设置7个入口参数,AL=0时清屏或清

窗口。 5. 字符显示

(1). AH=9:在光标位置显示字符及属性。BH=页,AL=字符,BL=属性,CX=字符重复次数。光标

回到原位置。

(2). AH=0AH:在光标位置只显示字符。BH=页,AL=字符,CX=字符重复次数。光标回到原位置。 (3). AH=8:读光标位置的字符及属性。BH=页。返回时AL=字符,AH=属性。 6. 彩色和字符串显示

(1). 在编写字符显示程序时,彩色显示和单色显示类似。注意设置属性值。

(2). AH=13H功能显示字符串有4种方式,前两种方式(AL=0,1)要指定整个显示字符串的属性,后

两种方式(AL=2,3)要指定每个字符的属性。 9.2.3 DOS显示功能调用(INT 21H的部分功能)

1. 显示单字符

(1). AH=2:显示一个字符并检验Ctrl_Break。DL=(显示)字符,光标跟随字符移动。 (2). AH=6:直接控制台I/O,不检验Ctrl_Break。

1). DL=0FFH:为输入字符,AL=输入字符;

2). DL=字符:为输出并显示一个字符,光标跟随字符移动。

2. AH=9:显示字符串。DS:DX=字符串的首地址,字符串必须以“$”为结束符,光标跟随字符串移动。在“$”前可加回车(0DH)换行(0AH)符。

9.3 打印机I/O

1. 打印机:是计算机的主要硬拷贝设备。按照印字原理分为字模式、针式、喷墨式、热转印式、激光式、LED式、LCS式、荧光式、电灼式、磁式和离子式等多种。

2. 打印机接口:有串行口和并行口两种。IBM PC系列机使用并行口,且打印机为Centronics型的36针插座,计算机上的并行口为D25型的插座。两者需要用专用的打印电缆连接。 3. 打印字符/图形要求软件将字符/图形的输出转化为打印机的控制码,这些软件通常称为打印机驱动程序。

4. 不同的打印机具有不同的控制字符,需要查阅该打印机的说明书。

9.3.1 DOS打印功能:INT 21H的功能5 (AH=5),打印一个放在(DL)寄存器中的字符。(可送一些控制

字符码:如回车、换行、换页等。) 9.3.2 打印机的控制字符

1. 标准控制字符:有空格——08H,水平TAB(横表)——09H,换行——0AH,垂直TAB(纵表)——0BH,换页——0CH,回车——0DH。(TAB功能在某些打印机中没有。) 2. 特殊的打印命令

(1). 部分特殊打印命令:设置紧缩方式——0FH,设置扩展方式——0EH,取消紧缩方式——12H,

取消扩展方式——14H。 打印机的状态字节 (2). 与ESC(1BH)字符一起使用的命令:有很多,需要阅读打印D7 D6 D5 D4 D3 D2 D1 D0 机手册。 (3). 向打印机发送命令码的格式 打 应 纸 选 I/O 未 未 超 1). 在数据区中定义命令码; 印 答 出 择 错 用 用 时 2). 直接用命令方式发送。 机 位 界 打

忙 印

机 精品文档