BIOS和DOS中断功能调用.ppt

上传人:本田雅阁 文档编号:2890180 上传时间:2019-06-02 格式:PPT 页数:71 大小:432.52KB
返回 下载 相关 举报
BIOS和DOS中断功能调用.ppt_第1页
第1页 / 共71页
BIOS和DOS中断功能调用.ppt_第2页
第2页 / 共71页
BIOS和DOS中断功能调用.ppt_第3页
第3页 / 共71页
BIOS和DOS中断功能调用.ppt_第4页
第4页 / 共71页
BIOS和DOS中断功能调用.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《BIOS和DOS中断功能调用.ppt》由会员分享,可在线阅读,更多相关《BIOS和DOS中断功能调用.ppt(71页珍藏版)》请在三一文库上搜索。

1、1,第五节 BIOS和DOS中断功能调用 (教材旧P238、新P239) 一、概述 1. BIOS和DOS中断子程层次特点 2. 中断类型分类 3. 调用方法 二、BIOS功能调用 1设置显示方式 ( 10H类型,00H功能 ) 2置光标位置 ( 10H类型,02H功能 ) 3清屏、清窗口 ( 10H类型,06H或07H功能 ) 三、 DOS系统功能调用 ( 21H类型中断调用 ) 1显示单字符 ( 02H功能 ) 2显示字符串 ( 09H功能 ) 3单字符输入 ( 01H、07H、08H功能 ) 4字符串输入 ( 0AH功能 ) 5检测键盘状态( 0BH功能 ) 6保存中断向量 ( 35H功

2、能 ) (第六章介绍) 7设置中断向量 ( 25H功能 ),2,复习内容:P339P247(新),P228P246(旧) 预内容习: P 110P140(新),P106P134(旧),作业:,1、预习实验二,其中:任务 1、(2)(4),2必做,,任务 1、(1)(3)选做.,实验四 任务1,作为家庭作业,在计算机上调通后, 经过教师检查 签字,3,2编写完整汇编语言程序,要求上机调试出来: (1)清屏,在10行5列上显示“ Hello China!” (2)将0AH功能输入的字符串, 用09H功能显示出来。,在DOS下执行,从键盘输入123456789回车, 屏幕上能显示Hello Worl

3、d!吗?为什么? 用在DEBUG下查看到的data段的内容来说明。,3问题回答,下面程序,汇编连接后,4,max DB 11,?,4 DUP(?),data SEGMENT,string DB Hello World! ,$,data ENDS,code SEGMENT,ASSUME CS:code, DS:data,start: MOV AX, data ; 置缓冲区地址于DS:DX,MOV DS, AX,LEA DX, max,MOV AH, 0AH ; 调用0AH输入功能,INT 21H,LEA DX, string,MOV AH, 09H ; 调用09H显示功能,INT 21H,MOV

4、 AH, 4CH,INT 21H ;返回DOS,code ENDS,END start,5,第三节 BIOS和DOS中断功能调用 (教材旧P238、新P239) 一、概述 二、BIOS功能调用 三、 DOS系统功能调用 ( 21H类型中断调用 ),6,一、概述 1BIOS 和 DOS 中断子程层次特点 2. 中断类型分类 3. 调用方法,7,1BIOS和DOS中断子程层次特点,8,层次特点: ROM BIOS中的中断子程 使用IN/OUT指令直接控制外设, 实现与外设之间的输入/输出操作, 以软件形式向其上层提供服务。 IO.SYS中的中断子程 ( 称基本输入/输出BIOS模块) 调用ROM

5、BIOS的基本I/O功能, 向 MSDOS.SYS提供设备驱动服务。,9,MSDOS.SYS中的中断子程 ( 称DOS内核模块 ) 调用IO.SYS,实现对外设的控制。 与标准外设有两层隔离 : IO.SYS和ROM BIOS。 其中21H类型的中断子程 提供了丰富的系统服务, 称21类型的中断调用 为DOS系统(功能)调用。,10,用户编程原则 尽可能使用DOS的系统功能调用, 提高程序可移植性。 在DOS功能不能实现情况下, 考虑用BIOS功能调用。 在DOS和BIOS的中断子程 不能解决问题时, 使用IN/OUT指令直接控制硬件。,11,2. 中断类型分类 向量表中的中断类型分为七类:

6、处理CPU特殊操作( 除0、溢出 )的00H、04H类型。 为DEBUG调试程序设置的单步( 01H )、断点( 03H )类型。 处理CPU的NMI引脚信号的02H类型。 非屏蔽硬中断子程 处理CPU的INTR引脚信号的080FH类型。 可屏蔽类型硬中断子程 用INT指令调用的中断子程 BIOS功能调用(如101AH) DOS功能调用 (如 21H),12,13,中断向量分配表,14,15,16,3. 调用方法,17,例1 单字符显示功能调用 MOV DL, A ;设置入口参数 MOV AH, 02H ;设置功能号 INT 21H ;执行中断调用 例2 单字符输入功能调用 MOV AH, 0

7、1H ;设置功能号 INT 21H ;执行中断调用 CMP AL, 0DH ;分析、应用出口参数 JZ exit 、,18,二、BIOS功能调用 基本输入/输出模块BIOS: 实现对输入/输出设备的控制, 内含0 1CH 等类型中断子程, 包括显示器、磁盘、键盘、打印机等标准外设的驱动程序。 (参看中断类型分配表) BIOS功能调用指对BIOS模块中的中断子程的调用。,19,有关显示器 显示器通过显卡(显示适配器)连接到计算机上。 单色显示器只能显示黑白两色。 彩色显示器能显示多种颜色。,20, 屏幕上各象素的显示信息,存放在显示缓冲区(显存)中。,21, 显示器有两种显示方式:,图形方式:

8、将屏幕划分为 mn的点阵,在每个点的位置显示象素, 一个点是一个象素。,文本方式 将屏幕划分为若干行和列,在每个网格位置上显示象素, 一个字符是一个象素。,22,文本方式 将屏幕划分为 m列和n行 (m n),在每个网格位置上显示象素, 一个字符是一个象素。,23,图形方式: 将屏幕划分为 mn的点阵,在每个点的位置显示象素, 一个点是一个象素。,24,在文本方式下, 对应屏幕上的每个字符, 在显示缓冲区中占用两个单元: 一个存放ASCII码, 一个存放显示属性。,25,例 10000111B 或 87H 表示黑底白字,闪烁 01110000B 或70H 表示白底黑字,不闪烁,26,据显存大小

9、,可存储若干页的字符象素。 例 16KB 显存能存储: 8025方式,4页( 0 3 ), 802524 =16000 4025方式,8页( 0 7 ), 402528 =16000,27,1设置显示方式,入口参数 AL = 显示方式值 00 4025 黑白文本方式 01 4025 彩色文本方式 02 8025 黑白文本方式 03 8025 彩色文本方式 04 320320 彩色图形方式 功能号 AH = 00H 类型号 10H 出口参数 无 实现功能 将显示方式设置为指定形式,例 将显示方式设置为 8025 彩色文本方式 MOV AL, 03H MOV AH, 00 INT 10H,28,入

10、口参数 AL = 0 CH = 窗口左上角行号 CL =窗口左上角列号 DH = 窗口右下角行号 DL =窗口右下角列号 BH = 窗口属性 功能号 AH = 06H 或 AH = 07H 类型号 10H 出口参数 无 实现功能 按给定属性清除指定的窗口内容,29,例 清除屏幕显示,将其属性置为反白(白底黑字)显示。 MOV AL, 0 ;清屏功能 MOV BH, 70H ;白底黑字 MOV CH, 0 ;左上角 行号 MOV CL, 0 ;左上角 列号 MOV DH, 24 ;右下角 行号 MOV DL, 79 ;右下角 列号 MOV AH, 6 ;功能号 INT 10H ;中断调用,30,

11、3. 置光标位置 光标控制开始显示的位置, 计算机有专门的硬件控制光标的显示大小、位置。 光标只在文本方式中出现,在图形方式下光标消失。,31,置光标位置 入口参数 DH = 行号 DL = 列号 BH = 页号 功能号 AH= 02H 类型号 10H 出口参数 无 实现功能 将光标设置在指定的位置,32,例 将光标设置在2行5列的位置 MOV DH, 2 MOV DL, 5 MOV BH, 0 MOV AH, 2 INT 10H,33,三、DOS系统功能调用 (21H类型中断调用) 1显示单字符 ( 02H功能 ) 2显示字符串 ( 09H功能 ) 3单字符输入 ( 01H、07H、08H功

12、能 ) 4字符串输入 ( 0AH功能 ) 5检测键盘状态 ( 0BH功能 ) 6保存中断向量 ( 35H功能 ) (第六章介绍) 7设置中断向量 ( 25H功能 ),34,1. 显示单字符 ( 02H功能 ) 入口参数 DL = 要显示字符的ASCII 码 功能号 AH=02H 类型号 INT 21H 出口参数 无 实现功能 显示指定字符,光标随动。,例 显示字符A MOV DL, A MOV AH, 02H INT 21H,35,例 使光标回到下一行的行首。 MOV DL , 0DH ;显示回车符 MOV AH , 02H INT 21H MOV DL , 0AH ;显示换行符 MOV AH

13、 , 02H INT 21H,36,2. 显示字符串 ( 09H功能 ) 入口参数 定义要显示的字符串, 字符串尾应为$,作为结束显示的标志。 DS : DX = 字符串的首地址 功能号 AH = 09 H 类型号 21H 出口参数 无 实现功能 显示字符串,遇 $ 停止显示,光标随动。,37,例 编程显示字符串 Tsinghua University,data SEGMENT ;定义显示的子符串 stri DB Tsinghua University, $ data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;

14、置缓冲区地址于DS:DX MOV DS, AX LEA DX, stri MOV AH, 09H ;调显示功能 INT 21H MOV AH, 4CH ;返回DOS INT 21H code ENDS END start,38,有关键盘 键盘通过键盘接口电路与计算机连接。 键盘上的键有三种类型: 字符键 AZ, 09等 功能键 F1F12, Page Up等 组合控制键 Shift, Ctrl, Alt等, 键盘上的每个键都有一个扫描码。 据扫描码可确定操作的是哪个键、是按下键还是释放键; 扫描码用一个字节表示。 低7位是扫描码的数字编码, 与键盘上的键一一对应; 最高位D7位表示键的操作状态

15、: 当按下键时, D7=0 ; 当释放键时, D7=1,39, 键盘中断子程功能(09H类型中断子程) 从键盘接口读取操作键的扫描码; 将扫描码转换成字符码; 大部分键的字符码为ASCII码, 无ASCII码键(如组合键Shift、Ctrl等)的字符码为0。 将键的扫描码、字符码存放在键盘缓冲区, 供其它有关键盘的中断子程应用。, 键盘接口对按下键和释放键均向计算机发出中断申请, 如果中断响应条件满足, CPU转去执行键盘中断子程。 键盘中断子程类型号为09H。,40,3. 单字符输入 ( 01H、07H、08H功能) 入口参数 无 功能号 AH = 01H 类型号 21H 出口参数 AL =

16、 键入字符的ASCII码 实现功能 等待从键盘输入一个字符, 并在屏幕上回显,光标移动, 检测Ctrl-Break键,41,例 利用键盘输入的字符产生分支: MOV AH, 1 ;等待从键盘输入 INT 21H CMP AL, Y ;是Y? JZ yes CMP AL, y ;是y? JZ yes no: . . . . . . JMP exit yes: . . . . . . exit: . . .,42,例 在中断向量表中查找从键盘输入的字符, 并将其个数用二进制形式显示出来。( scanskey.asm),43, 入口参数 无 功能号 AH = 07H 类型号 21H 出口参数 AL

17、= 键入字符的ASCII码 实现功能 等待从键盘输入一个字符, 不在屏幕上回显, 不检测Ctrl-Break键,44,例 用不带回显功能输入密码时: input: MOV AH, 07H ;等待从键盘输入 INT 21H MOV DI, AL ;存入缓冲区 CMP AL, 0DH ;是回车符? JNZ input ;不是,继续输入 check: 、 、,45,4. 字符串输入 ( 0AH 功能 ) 入口参数 DS : DX = 缓冲区的首地址 ( DS :DX ) = 限制最多输入的字符数 功能号 AH = 0AH 类型号 21H 出口参数 ( DS : DX+1 ) = 实际键入的字符(不含

18、回车符) 从( DS : DX+2 )开始顺序存放键入的字符串, 回车符0DH为串尾最后一字符。 实现功能 等待从键盘输入字符串,并存入设定的缓冲区内, 同时回显字符串,光标随着移动, 回车符使光标回到行首。 注意事项:应按要求先定义缓冲区,再调用。,46,例 应用0AH功能输入字符串。,data SEGMENT ;定义缓冲区 max DB 11 ;定义限制最多输入个数 lenth DB ? ;用于存放实际输入个数 stri DB 11 DUP(?) ;用于存放输入的字符串 data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX

19、 , data ;置缓冲区地址于DS:DX MOV DS , AX LEA DX , max MOV AH , 0AH INT 21H ;调0A输入功能 MOX CH , 0 MOV CL , lenth ;取字符串长度放CX中 LEA BX , stri ;取字符串首址于BX中 MOV AL , BX ;应用输入字符 、 code ENDS,47,data SEGMENT ;定义缓冲区 max DB 11 ;定义限制最多输入个数 lenth DB ? ;用于存放实际输入个数 stri DB 11 DUP(?) ;用于存放输入的字符串 data ENDS 从键盘输入ABCD, 回车,内存的存放

20、结果:,48,49,50,0AH功能执行过程: 若(DS:DX)字节单元的值为0,则不等待从键盘输入,结束调用。 若(DS:DX) 字节单元的内容大于0,则等待从键盘输入, 并把输入键的ASCII码顺序存放在DS : DX+2开始的单元, 按回车键表示结束输入。 当按下键的个数超过( DS : DX )中值,发出警告声 嘟嘟 , 不再接收输入的数据, 直到输入回车键。 将实际输入的字符个数(不包括回车键)填入(DS:DX+1), 结束调用。,51,0AH功能注意事项: 输入的字符均带回显,且光标随字符移动。 当输入回车符结束时,也回显回车符。 表现为功能调用结束后,光标回到了行首。 回车符0D

21、H作为一个输入的字符存放在字符串尾, 但计数输入个数时,不包括回车键。 实际最多能输入的字符数 = 限制的最多数-1 (回车符占一个) 执行完0AH功能后,DS和DX的值不变, DS:DX仍指向缓冲区的首地址。 整个缓冲区的大小应为:限制的最多数 +2 max DB 11, ? , 11 dup (?),52,例 利用DEBUG查看0A功能输入结果。,data SEGMENT max DB 11, ?, 11 DUP(?) data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;置缓冲区地址于DS:DX MOV D

22、S, AX LEA DX, max MOV AH, 0AH ;调输入功能 INT 21H MOV CH, 0 MOV CL, max+1 ;取输入长度到CX中 MOV AH, 4CH ;返回DOS INT 21H code ENDS END start,53,D:MASMDEBUG TEST0a.exe ;装入执行文件 -U ;反汇编程序 129E:0000 B89D12 MOV AX , 129D 129E:0003 8ED8 MOV DS , AX 129E:0005 8D160000 LEA DX , 0000 129E:0009 B40A MOV AH , 0A 129E:000B C

23、D21 INT 21 129E:000D B500 MOV CH , 00 129E:000F 8A0E0100 MOV CL , 0001 129E:0013 B44C MOV AH , 4C 129E:0015 CD21 INT 21 、 -D 129D:0 L10 ;查看程序执行前缓冲区内容 129D:0000 0B 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -G 000D ;执行程序 Hello ;从键盘输入字符串 Program terminated normally -D 129D:0 L10 ;查看程序执行后缓冲区内容 129D:0

24、000 0B 05 48 65 6C 6C 6F 0D-00 00 00 00 00 00 00 00 Hello. -,54,思考: 1. 若将程序改为如下形式, 设想程序执行的结果。,data SEGMENT max DB 100H DUP ( ? ) data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;置缓冲区地址于DS:DX MOV DS, AX LEA DX, max MOV AH, 0AH ;调输入功能 INT 21H MOV AH, 4CH ;返回DOS INT 21H code ENDS END

25、 start,55,结果是:不等待输入,结束0AH功能调用。,56,2. 若将程序改为如下形式, 设想程序执行的结果。,data SEGMENT max DW 100H,? ,100H DUP ( ? ) ;定义为字类型 data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;置缓冲区地址于DS:DX MOV DS, AX LEA DX, max MOV AH, 0AH ;调输入功能 INT 21H MOV AH, 4CH ;返回DOS INT 21H code ENDS END start,57,结果是:不等待输

26、入,结束0AH功能调用。,58,59,D:MASMDEBUG e0a09.exe -U ;查看程序 129F:0000 B89D12 MOV AX,129D 129F:0003 8ED8 MOV DS,AX 129F:0005 8D160000 LEA DX ,0000 129F:0009 B409 MOV AH ,09 129F:000B CD21 INT 21 129F:000D 8D160F00 LEA DX ,000F 129F:0011 B40A MOV AH , 0A 129F:0013 CD21 INT 21 129F:0015 B44C MOV AH , 4C 129F:001

27、7 CD21 INT 21 -D 129D:0 L20 ;执行程序前查看 data段内容 129D:0000 50 6C 65 61 73 65 20 49-6E 70 75 74 20 3A 24 0B Please Input :$. 129D:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -G ;执行程序 Please Input :Hello! Program terminated normally -D 129 D:0 L20 ;执行程序后查看 data段内容 129D:0000 50 6C 65 61 73 65 20 4

28、9-6E 70 75 74 20 3A 24 0B Please Input :$. 129D:0010 06 48 65 6C 6C 6F 21 0D-00 00 00 00 00 00 00 00 .Hello!. -,60,data段内存情况:,61,思考:程序中少了一个 $ 符的后果。,data SEGMENT stri DB Please Input : max DB 11, ?, 11 DUP(?) data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;置缓冲区地址于DS:DX MOV DS, AX

29、LEA DX, stri MOV AH, 09H ;显示提示 INT 21H LEA DX, max ;等待从键盘输入 MOV AH, 0AH INT 21H MOV AH, 4CH INT 21H code ENDS END start,62,63,5检测键盘状态 ( 0BH功能 ) 入口参数 无 功能号 AH= 0BH 类型号 21H 出口参数 AL= FFH , 表示有键按下。 AL= 0 , 表示无键按下。 实现功能 检测键盘状态(通过检测键盘缓冲区实现),64,例 利用0B功能实现按键退出循环。 、 continue: 、 、 、 MOV AH, 0BH ;检测键盘缓冲区是否有键按下

30、 INT 21H CMP AL, 0FFH JNZ continue ;无键按下继续循环 、 、 MOV AH, 4CH INT 21H,65,6. 保存中断向量 (35H功能) 入口参数 AL = 要保存向量的中断类型号N 功能号 AH = 35H 类型号 21H 出口参数 BX = ( 0:N4 ) ES = ( 0:N4 +2 ) 实现功能 将类型号N 的中断向量保存在ES、BX中,66,方法一: 用堆栈保存中断向量 MOV AL, 09H ;取中断向量 MOV AH, 35H INT 21H PUSH ES ;用堆栈保存 PUSH BX 、 、,例 保存09H类型的中断向量,67,方法

31、二: 用变量保存中断向量 save_09cs DW ? ;定义变量 save_09ip DW ? 、 MOV AX, SEG save_09cs MOV DS, AX MOV AL, 09H ;取中断向量 MOV AH, 35H INT 21H MOV save_09cs , ES ;用变量保存 MOV save_09ip , BX,68,7. 设置中断向量 (25H功能),入口参数 AL = 要设置向量的中断类型号N DS:DX = 中断子程的入口地址(中断向量) 功能号 AH = 25H 类型号 21H 出口参数 无 实现功能 将类型N的中断向量设置在向量表中, 即 ( 0: N 4) =

32、类型N中断子程入口地址的偏移值 ( 0: N 4+2) =类型N中断子程入口地址的段值,69,例1 设置中断子程Sound 的中断向量,类型号为60H,code SEGMENT ASSUME CS:code start: 、 MOV AX, SEG sound MOV DS, AX MOV DX, Offset sound MOV AL, 60H MOV AH, 25H INT 21H 、 INT 60H ;调用60H中断子程 、 MOV AH,4CH INT 21H,; 中断子程 sound PROC 、 、 、 IRET sound ENDP code ENDS END start,70,

33、汇编语言程序结构作业: 一、编写完整汇编语言程序,要求上机调试出来。: 1清屏,在10行5列上显示“ Hello China!” 2将0AH功能输入的字符串用09H功能显示出来。 二、问题回答 下面程序,汇编连接后,在DOS下执行, 从键盘输入123456789, 回车,屏幕上能显示 Hello World!吗?为什么? 用在DEBUG下查看到的data段的内容来说明。,71,data SEGMENT max DB 11,?,4 DUP(?) string DB Hello World! ,$ data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;置缓冲区地址于DS:DX MOV DS, AX LEA DX, max MOV AH, 0AH ;调用0AH输入功能 INT 21H LEA DX, string MOV AH, 09H ;调用09H显示功能 INT 21H MOV AH, 4CH INT 21H code ENDS END start,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1