微机原理第五章课件.ppt

上传人:飞****2 文档编号:92372937 上传时间:2023-06-03 格式:PPT 页数:66 大小:430.01KB
返回 下载 相关 举报
微机原理第五章课件.ppt_第1页
第1页 / 共66页
微机原理第五章课件.ppt_第2页
第2页 / 共66页
点击查看更多>>
资源描述

《微机原理第五章课件.ppt》由会员分享,可在线阅读,更多相关《微机原理第五章课件.ppt(66页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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单字

2、符输入单字符输入(01H、07H、08H功能功能)4字符串输入字符串输入(0AH功能功能)5检测键盘状态检测键盘状态(0BH功能功能)6保存中断向量保存中断向量(35H功能功能)(第六章介绍)第六章介绍)7设置中断向量设置中断向量(25H功能功能)1 第第五五节节 BIOS和和DOS中断功能调用中断功能调用 一、概述一、概述 二、二、BIOS功能调用功能调用三、三、DOS系统功能调用系统功能调用 (21H类型中断调用类型中断调用)2一、概述一、概述1BIOS 和和 DOS 中断子程层次特点中断子程层次特点2.中断类型分类中断类型分类3.调用方法调用方法31BIOS和和DOS中断子程层次特点中断

3、子程层次特点用户程序用户程序磁盘管理模块磁盘管理模块(DOS内核内核)MSDOS.SYS 系统功能系统功能基本输入基本输入/输出输出 BIOS 模模 块块IO.SYS 设备驱动设备驱动ROM BIOS 基本基本I/O系系 统统 硬硬 件件装入装入命令处理模块命令处理模块COMMAN D.COM用户命令用户命令DOS系统层次结构系统层次结构4 层次特点:层次特点:l ROM BIOS中的中断子程中的中断子程 使使用用IN/OUT指令指令直接控制外设,直接控制外设,实现与外设之间的输入实现与外设之间的输入/输出操作,输出操作,以软件形式向其上层提供服务。以软件形式向其上层提供服务。l IO.SYS

4、中的中断子程中的中断子程 (称基本输入称基本输入/输出输出BIOS模块模块)调用调用ROM BIOS的基本的基本I/O功能功能,向向 MSDOS.SYS提供设备驱动服务。提供设备驱动服务。用户程序用户程序磁盘管理模块磁盘管理模块(DOS内核内核)MSDOS.SYS 系统功能系统功能基本输入基本输入/输出输出 BIOS 模模 块块IO.SYS 设备驱动设备驱动ROM BIOS 基本基本I/O系系 统统 硬硬 件件装装入入命令处理模块命令处理模块COMMAN D.COM用户命令用户命令5l MSDOS.SYS中的中断子程中的中断子程 (称称DOS内核模块内核模块)调用调用IO.SYS,实现对外设的

5、控制。实现对外设的控制。与标准外设有两层隔离与标准外设有两层隔离:IO.SYS和和ROM BIOS。其中其中:21H类型的中断子程类型的中断子程提供了丰富的系统服务,提供了丰富的系统服务,称称21类型的中断调用类型的中断调用为为DOS系统系统(功能功能)调用调用。用户程序用户程序磁盘管理模块磁盘管理模块(DOS内核内核)MSDOS.SYS 系统功能系统功能基本输入基本输入/输出输出 BIOS 模模 块块IO.SYS 设备驱动设备驱动ROM BIOS 基本基本I/O系系 统统 硬硬 件件装装入入命令处理模块命令处理模块COMMAN D.COM用户命令用户命令6l 用户编程原则用户编程原则尽可能使

6、用尽可能使用DOS的系统功能调用,的系统功能调用,提高程序可移植性。提高程序可移植性。在在DOS功能不能实现情况下,功能不能实现情况下,考虑用考虑用BIOS功能调用。功能调用。在在DOS和和BIOS的中断子程的中断子程 不能解决问题时不能解决问题时,使用使用IN/OUT指令直接控制硬件。指令直接控制硬件。用户程序用户程序磁盘管理模块磁盘管理模块(DOS内核内核)MSDOS.SYS 系统功能系统功能基本输入基本输入/输出输出 BIOS 模模 块块IO.SYS 设备驱动设备驱动ROM BIOS 基本基本I/O系系 统统 硬硬 件件装装入入命令处理模块命令处理模块COMMAN D.COM用户命令用户

7、命令72.中断类型分类中断类型分类l 向量表中的中断类型分为七类:向量表中的中断类型分为七类:处理处理CPU特殊操作特殊操作(除除0、溢出、溢出)的的00H、04H类型。类型。为为DEBUG调试程序设置调试程序设置的单步的单步(01H)、断点断点(03H)类型。类型。处理处理CPU的的NMI引脚信号引脚信号的的02H类型。类型。非屏蔽硬中断子程非屏蔽硬中断子程 处理处理CPU的的INTR引脚信号引脚信号的的080FH类型。类型。可屏蔽类型硬中断子程可屏蔽类型硬中断子程 用用INT指令调用的中断子程指令调用的中断子程 BIOS功能调用(如功能调用(如101AH)DOS功能调用功能调用(如(如 2

8、1H)NMIINTR80888 保留类型保留类型为为DOS系统保留系统保留 (1)指现在未用到,以后系统可能会用到。指现在未用到,以后系统可能会用到。(2)已用到,但不向用户公开。已用到,但不向用户公开。为用户保留为用户保留 (1)被系统子程嵌套调用了的类型被系统子程嵌套调用了的类型(如如1BH、1CH)。使用户在系统功能基础上扩充功能。使用户在系统功能基础上扩充功能。(2)系统未占用类型系统未占用类型(如如 60H67H)。非中断向量类型非中断向量类型对应向量表中的对应向量表中的4个单元存放的不是中断向量。个单元存放的不是中断向量。(如(如1DH、1EH、1FH、41H、46H、22H)通常

9、是一些参数表的地址信息通常是一些参数表的地址信息.9l 中断向量分配表中断向量分配表10中断向量分配表中断向量分配表 (续)续)11中断向量分配表中断向量分配表 (续)续)123.调用方法调用方法设置入口参数设置入口参数在在AH设置功能号设置功能号m执行中断指令执行中断指令INT N分析、应用出口参数分析、应用出口参数13例例1 单字符显示功能调用单字符显示功能调用MOV DL,A ;设置入口参数设置入口参数MOV AH,02H ;设置功能号设置功能号 INT 21H ;执行中断调用执行中断调用 例例2 单字符输入功能调用单字符输入功能调用MOV AH,01H ;设置功能号设置功能号 INT

10、21H ;执行中断调用执行中断调用CMP AL,0DH ;分析、应用出口参数分析、应用出口参数JZ exit、14二、二、BIOS功能调用功能调用l 基本输入基本输入/输出模块输出模块BIOS:实现对输入实现对输入/输出设备的控制,输出设备的控制,内含内含0 1CH 等类型中断子程,等类型中断子程,包括显示器、磁盘、键盘、打印机等标准外设的驱动程序。包括显示器、磁盘、键盘、打印机等标准外设的驱动程序。(参看中断类型分配表)(参看中断类型分配表)l BIOS功能调用指对功能调用指对BIOS模块中的中断子程的调用。模块中的中断子程的调用。15l 有关显示器有关显示器 显示器通过显卡显示器通过显卡(

11、显示适配器显示适配器)连接到计算机上。连接到计算机上。单色显示器只能显示黑白两色。单色显示器只能显示黑白两色。彩色显示器能显示多种颜色。彩色显示器能显示多种颜色。16 屏幕上各象素的显示信息,存放在显示缓冲区(显存)中。屏幕上各象素的显示信息,存放在显示缓冲区(显存)中。640KB RAM 基本内存基本内存0000:0000 0040:0000 0050:0000 0070:0000 A000:0000 B000:0000 C800:0000 F600:0000 FE00:0000 FE00:1FFF显示缓存区显示缓存区(显存显存)硬盘驱动器控制硬盘驱动器控制ROM32KB ROM BASIC

12、8KB ROM BIOSIO.SYS模块模块COMMAND.COM常驻模块常驻模块MSDOS.SYS模块模块用户程序空间用户程序空间COMMAND.COM暂驻模块暂驻模块256KB ROMDOS工作区工作区ROM BIOS工作区工作区128KB RAM 保留区保留区1KB中断向量表中断向量表17 显示器有两种显示方式显示器有两种显示方式:图形方式图形方式:将屏幕划分为将屏幕划分为 mn的点阵,在每个点的位置显示象素的点阵,在每个点的位置显示象素,一个点是一个象素一个点是一个象素。文本方式文本方式将屏幕划分为若干行和列,在每个网格位置上显示象素,将屏幕划分为若干行和列,在每个网格位置上显示象素,

13、一个字符是一个象素一个字符是一个象素。18文本方式文本方式将屏幕划分为将屏幕划分为 m列和列和n行行(m n),在每个网格位置上显示象素,在每个网格位置上显示象素,一个字符是一个象素。一个字符是一个象素。8025 文本方式文本方式A 0列列0 行行79列列24行行BC19 640480 图形方式图形方式640 点点480点点图形方式图形方式:将屏幕划分为将屏幕划分为 mn的点阵,在每个点的位置显示象素的点阵,在每个点的位置显示象素,一个点是一个象素一个点是一个象素。20在文本方式下,在文本方式下,对应屏幕上的对应屏幕上的每个字符每个字符,在显示缓冲区中占用两个单元在显示缓冲区中占用两个单元:一

14、个存放一个存放ASCII码,码,一个存放显示属性。一个存放显示属性。41H07H42H07H61H70H62H70H、显示缓冲区显示缓冲区(显存)(显存)字符字符A,黑底白字黑底白字字符字符B,黑底白字黑底白字字符字符a,白底黑字白底黑字字符字符b,白底黑字白底黑字21例例 10000111B 或或 87H 表示黑底白字,闪烁表示黑底白字,闪烁 01110000B 或或70H 表示白底黑字,不闪烁表示白底黑字,不闪烁1616种种0000 黑黑 1000 灰灰 0010 绿绿 1010 浅绿浅绿0100 红红 1100 浅红浅红0111 灰白灰白 1111 白白BL R G BIR G B闪烁闪

15、烁背景背景前景前景765432108种种000 黑黑 010 绿绿 100 红红111 白白0 不闪烁不闪烁1 闪烁闪烁属性字节的含义:属性字节的含义:22 据显存大小,可存储若干页的字符象素。据显存大小,可存储若干页的字符象素。例例 16KB 显存能存储显存能存储:8025方式,方式,4页页(0 3),802524=16000 4025方式,方式,8页页(0 7),402528=16000231设置显示方式设置显示方式入口参数入口参数 AL=显示方式值显示方式值 00 4025 黑白文本方式黑白文本方式 01 4025 彩色文本方式彩色文本方式 02 8025 黑白文本方式黑白文本方式 03

16、 8025 彩色文本方式彩色文本方式 04 320320 彩色图形方式彩色图形方式 功能号功能号 AH=00H类型号类型号 10H出口参数出口参数 无无 实现功能实现功能 将显示方式设置为指定形式将显示方式设置为指定形式例例 将显示方式设置为将显示方式设置为 8025 彩色文本方式彩色文本方式 MOV AL,03H MOV AH,00 INT 10H242.清屏、清窗口功能清屏、清窗口功能入口参数入口参数 AL=0 CH=窗口左上角行号窗口左上角行号 CL=窗口左上角列号窗口左上角列号 DH=窗口右下角行号窗口右下角行号 DL=窗口右下角列号窗口右下角列号 BH=窗口属性窗口属性功能号功能号

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

18、置光标位置l 光标控制开始显示的位置,光标控制开始显示的位置,计算机有专门的硬件控制光标的显示大小、位置。计算机有专门的硬件控制光标的显示大小、位置。l 光标只在文本方式中出现光标只在文本方式中出现,在图形方式下光标消失。,在图形方式下光标消失。0列列0 行行79列列24 行行5列列1列列1 行行2 行行27置光标位置置光标位置 入口参数入口参数 DH=行号行号 DL=列号列号 BH=页号页号 功能号功能号 AH=02H 类型号类型号 10H 出口参数出口参数 无无 实现功能实现功能 将光标设置在指定的位置将光标设置在指定的位置28例例 将光标设置在将光标设置在2行行5列列的位置的位置MOV

19、DH,2MOV DL,5MOV BH,0MOV AH,2INT 10H 0列列0 行行79列列24行行5列列1列列1 行行2 行行29三、三、DOS系统功能调用系统功能调用(21H类型中断调用类型中断调用)1显示单字符显示单字符(02H功能功能)2显示字符串显示字符串(09H功能功能)3单字符输入单字符输入(01H、07H、08H功能功能)4字符串输入字符串输入(0AH功能功能)5检测键盘状态检测键盘状态(0BH功能功能)6保存中断向量保存中断向量(35H功能功能)(第六章介绍第六章介绍)7设置中断向量设置中断向量(25H功能功能)301.显示单字符显示单字符(02H功能功能)入口参数入口参数

20、 DL=要显示字符的要显示字符的ASCII 码码 功能号功能号 AH=02H类型号类型号 INT 21H出口参数出口参数 无无实现功能实现功能 显示指定字符显示指定字符,光标随动。光标随动。例例 显示字符显示字符A MOV DL,A MOV AH,02H INT 21H31例例 使光标回到下一行的行首。使光标回到下一行的行首。MOV DL,0DH ;显示回车符显示回车符MOV AH,02HINT 21HMOV DL,0AH ;显示换行符显示换行符MOV AH,02HINT 21H H e l l o W o r l d 322.显示字符串显示字符串(09H功能功能)入口参数入口参数 定义要显示

21、的字符串,定义要显示的字符串,字符串尾应为字符串尾应为$,作为结束显示的标志。,作为结束显示的标志。DS:DX=字符串的首地址字符串的首地址功能号功能号 AH=09 H类型号类型号 21H出口参数出口参数 无无实现功能实现功能 显示字符串,遇显示字符串,遇$停止显示,光标随动停止显示,光标随动。33例例 编程显示字符串编程显示字符串 Tsinghua Universitydata SEGMENT ;定义显示的子符串定义显示的子符串stri DB Tsinghua University,$data ENDScode SEGMENT ASSUME CS:code,DS:datastart:MOV

22、AX,data ;置缓冲区地址于置缓冲区地址于DS:DX MOV DS,AX LEA DX,stri MOV AH,09H ;调显示功能调显示功能 INT 21H MOV AH,4CH ;返回返回DOS INT 21H code ENDS END start34l 有关键盘有关键盘 键盘通过键盘接口电路与计算机连接。键盘通过键盘接口电路与计算机连接。键盘上的键有三种类型键盘上的键有三种类型:字符键字符键 AZ,09等等 功能键功能键 F1F12,Page Up等等 组合控制键组合控制键 Shift,Ctrl,Alt等等 键盘上的每个键都有一个键盘上的每个键都有一个扫描码扫描码。据扫描码可确定操

23、作的是哪个键、是按下键还是释放键;据扫描码可确定操作的是哪个键、是按下键还是释放键;扫描码用一个字节表示。扫描码用一个字节表示。低低7位是扫描码的数字编码位是扫描码的数字编码,与键盘上的键一一对应;与键盘上的键一一对应;最高位最高位D7位表示键的操作状态:位表示键的操作状态:当当按下键时按下键时,D7=0;当当释放键时释放键时,D7=135 键盘中断子程功能(键盘中断子程功能(09H类型中断子程)类型中断子程)从键盘接口读取操作键的扫描码从键盘接口读取操作键的扫描码;将扫描码转换成字符码;将扫描码转换成字符码;大部分键的字符码为大部分键的字符码为ASCII码,码,无无ASCII码键(如组合键码

24、键(如组合键Shift、Ctrl等)的字符码为等)的字符码为0。将键的扫描码、字符码存放在键盘缓冲区将键的扫描码、字符码存放在键盘缓冲区,供其它有关键盘的中断子程应用。供其它有关键盘的中断子程应用。键盘接口对按下键和释放键均向计算机发出中断申请键盘接口对按下键和释放键均向计算机发出中断申请,如果如果中断响应条件满足中断响应条件满足,CPU转去执行键盘中断子程。转去执行键盘中断子程。键盘中断子程类型号为键盘中断子程类型号为09H。363.单字符输入单字符输入(01H、07H、08H功能功能)入口参数入口参数 无无 功能号功能号 AH=01H 类型号类型号 21H 出口参数出口参数 AL=键入字符

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

26、.asm)code SEGMENT ;代码段开始代码段开始 ASSUME CS:code begin:MOV AX,0000H ;设置查找首地址设置查找首地址 MOV DS,AX MOV SI,0000H MOV CX,0400H ;设置查找长度设置查找长度 MOV BX,0 ;计算值初值计算值初值 MOV AH,01H ;从键盘输入从键盘输入 INT 21H ;输入关键字输入关键字 MOV DL,AL ;保存在保存在DL中中 next:LODSB ;从串取从串取 CMP AL,DL ;与关键字比较与关键字比较 JNZ point INC BX ;计算值加计算值加1 point:LOOP ne

27、xt ;查找结束?查找结束?CALL display ;调用显示子程调用显示子程 MOV AH,4CH ;调用调用4CH功能功能 INT 21H ;返回返回DOS;用二进制显示用二进制显示BX内容子程内容子程 display PROC MOV CX,16 ;显示位数显示位数 rotate:ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H LOOP rotate RET ;子程返回子程返回 display ENDP code ENDS ;代码段结束代码段结束 END begin39 入口参数入口参数 无无 功能号功能号 AH=0

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

29、地址缓冲区的首地址 (DS:DX)=限制最多输入的字符数限制最多输入的字符数 功能号功能号 AH=0AH 类型号类型号 21H 出口参数出口参数 (DS:DX+1)=实际键入的字符实际键入的字符(不含回车符不含回车符)从从(DS:DX+2)开始顺序存放键入的字符串,开始顺序存放键入的字符串,回车符回车符0DH为串尾最后一字符。为串尾最后一字符。实现功能实现功能 等待从键盘输入字符串,并存入设定的缓冲区内,等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动,同时回显字符串,光标随着移动,回车符使光标回到行首。回车符使光标回到行首。注意事项:注意事项:应按要求先定义缓冲区,再

30、调用。应按要求先定义缓冲区,再调用。42例例 应用应用0AH功能输入字符串。功能输入字符串。data SEGMENT ;定义缓冲区定义缓冲区max DB 11 ;定义限制最多输入个数定义限制最多输入个数lenth DB?;用于存放实际输入个数用于存放实际输入个数stri DB 11 DUP(?);用于存放输入的字符串用于存放输入的字符串data ENDScode SEGMENT ASSUME CS:code,DS:datastart:MOV AX,data ;置缓冲区地址于置缓冲区地址于DS:DX MOV DS,AX LEA DX,max MOV AH,0AH INT 21H ;调调0A输入功

31、能输入功能 MOX CH,0 MOV CL,lenth ;取字符串长度放取字符串长度放CX中中 LEA BX,stri ;取字符串首址于取字符串首址于BX中中 MOV AL,BX ;应用输入字符应用输入字符 、code ENDS 43data SEGMENT ;定义缓冲区定义缓冲区max DB 11 ;定义限制最多输入个数定义限制最多输入个数lenth DB?;用于存放实际输入个数用于存放实际输入个数stri DB 11 DUP(?);用于存放输入的字符串用于存放输入的字符串data ENDS从键盘输入从键盘输入ABCD,回车,内存的存放结果回车,内存的存放结果:0B 04 41 42 43

32、44 0D 00max0700 00 00 00 00 00 00 0080a 0b0f12345690c 0d 0elenthstri地址地址内容内容DS:DX44如下编程与上例相同如下编程与上例相同:data SEGMENT max DB 11 等价于:等价于:DB?max DB 11,?,11 DUP(?)DB 11 DUP(?)data ENDS code SEGMENT ASSUME CS:code,DS:datastart:MOV AX,data ;置缓冲区地址于置缓冲区地址于DS:DX MOV DS,AX LEA DX,max MOV AH,0AH ;调输入功能调输入功能 INT

33、 21H MOX CH,0 MOV CL,max+1 ;取字符串长度放取字符串长度放CX中中 LEA BX,max+2 ;取字符串首址于取字符串首址于BX中中 MOV AL,BX ;应用输入字符应用输入字符 、code ENDS45data SEGMENTmax DB 11 DB?DB 11 DUP(?)data ENDS从键盘输入从键盘输入ABCD,回车,内存的存放结果回车,内存的存放结果:等价于等价于max DB 11,?,?,11 DUP(?)0B 04 41 42 43 44 0D 00max0700 00 00 00 00 00 00 0080a 0b0f12345690c 0d 0

34、e地址地址内容内容DS:DX460AH功能执行过程功能执行过程:若若(DS:DX)字节单元的值为字节单元的值为0,则不等待从键盘输入,结束调用,则不等待从键盘输入,结束调用。若若(DS:DX)字节单元的内容字节单元的内容大于大于0,则等待从键盘输入,则等待从键盘输入,并把输入键的并把输入键的ASCII码顺序存放在码顺序存放在DS:DX+2开始的单元,开始的单元,按回车键表示结束输入。按回车键表示结束输入。当当按按下下键键的的个个数数超超过过(DS:DX)中中值值,发发出出警警告告声声 嘟嘟嘟嘟,不再接收输入的数据不再接收输入的数据,直到输入回车键。直到输入回车键。将实际输入的字符个数将实际输入

35、的字符个数(不包括回车键不包括回车键)填入填入(DS:DX+1),结束调用。结束调用。DS:DX00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00470AH功能注意事项功能注意事项:输入的字符均带回显,且光标随字符移动。输入的字符均带回显,且光标随字符移动。当输入回车符结束时,也当输入回车符结束时,也回显回车符回显回车符。表现为功能调用结束后,表现为功能调用结束后,光标回到了行首。光标回到了行首。回车符回车符0DH作为一个输入的字符存放在字符串尾,作为一个输入的字符存放在字符串尾,但但计数输入个数时,不包括回车键。计数输入个数时,不包括回车键。实际最

36、多能输入的字符数实际最多能输入的字符数=限制的最多数限制的最多数-1 (回车符占一个)(回车符占一个)执行完执行完0AH功能后,功能后,DS和和DX的值不变,的值不变,DS:DX仍指向缓冲区的首地址。仍指向缓冲区的首地址。整个缓冲区的大小应为整个缓冲区的大小应为:限制的最多数限制的最多数+2 max DB 11,?,11 dup(?)48例例 利用利用DEBUG查看查看0A功能输入结果功能输入结果。data SEGMENT max DB 11,?,11 DUP(?)data ENDScode SEGMENT ASSUME CS:code,DS:datastart:MOV AX,data ;置缓

37、冲区地址于置缓冲区地址于DS:DX MOV DS,AX LEA DX,max MOV AH,0AH ;调输入功能调输入功能 INT 21H MOV CH,0 MOV CL,max+1 ;取输入长度到取输入长度到CX中中 MOV AH,4CH ;返回返回DOS INT 21Hcode ENDS END start49D:MASMDEBUG TEST0a.exe ;装入执行文件装入执行文件-U ;反汇编程序反汇编程序 129E:0000 B89D12 MOV AX,129D129E:0003 8ED8 MOV DS,AX129E:0005 8D160000 LEA DX,0000129E:0009

38、 B40A MOV AH,0A129E:000B CD21 INT 21129E:000D B500 MOV CH,00129E:000F 8A0E0100 MOV CL,0001129E:0013 B44C MOV AH,4C129E: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 nor

39、mally-D 129D:0 L10 ;查看程序执行查看程序执行后后缓冲区内容缓冲区内容 129D:0000 0B 05 48 65 6C 6C 6F 0D-00 00 00 00 00 00 00 00 .Hello.-50思考:思考:1.若将程序改为如下形式,若将程序改为如下形式,设想程序执行的结果。设想程序执行的结果。data SEGMENT max DB 100H DUP(?)data ENDScode SEGMENT ASSUME CS:code,DS:datastart:MOV AX,data ;置缓冲区地址于置缓冲区地址于DS:DX MOV DS,AX LEA DX,max MO

40、V AH,0AH ;调输入功能调输入功能 INT 21H MOV AH,4CH ;返回返回DOS INT 21Hcode ENDS END start51结果是:结果是:不等待输入,结束不等待输入,结束0AH功能调用。功能调用。00 00 0000 00 00 00 00max0700 00 00 00 00 00 00 0080a0b0f12345690c 0d 0e地址地址内容内容DS:DX注意:注意:由于由于DS:DX限制输入最大字符数为限制输入最大字符数为0,所以不等待输入所以不等待输入,结束结束0AH功能调用。功能调用。原因是:原因是:522.若将程序改为如下形式,若将程序改为如下形

41、式,设想程序执行的结果。设想程序执行的结果。data SEGMENT max DW 100H,?,100H DUP(?);定义为字类型定义为字类型data ENDScode SEGMENT ASSUME CS:code,DS:datastart:MOV AX,data ;置缓冲区地址于置缓冲区地址于DS:DX MOV DS,AX LEA DX,max MOV AH,0AH ;调输入功能调输入功能 INT 21H MOV AH,4CH ;返回返回DOS INT 21Hcode ENDS END start53结果是:结果是:不等待输入,结束不等待输入,结束0AH功能调用。功能调用。00 01 0

42、000 00 00 00 00max0700 00 00 00 00 00 00 0080a0b0f12345690c 0d 0e地址地址内容内容DS:DX注意:注意:0AH功能以功能以字节类型应用字节类型应用DS:DX指向的缓冲区指向的缓冲区。并不随缓冲区类型定义的变化而变化。并不随缓冲区类型定义的变化而变化。原因是:原因是:54例例 编程从键盘输入字符串,给出显示提示编程从键盘输入字符串,给出显示提示Please input:data SEGMENT stri DB Please Input:,$max DB 11,?,11 DUP(?)data ENDScode SEGMENT ASSU

43、ME CS:code,DS:datastart:MOV AX,data ;置缓冲区地址于置缓冲区地址于DS:DX MOV DS,AX 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利用利用DOS 功能调用,编写小程序功能调用,编写小程序55D:MASMDEBUG e0a09.exe-U ;查看程序查看程序129F:0000 B89D12 MOV AX,129D129F:0003 8ED8 MO

44、V DS,AX129F:0005 8D160000 LEA DX,0000129F:0009 B409 MOV AH,09129F:000B CD21 INT 21129F:000D 8D160F00 LEA DX,000F129F:0011 B40A MOV AH,0A129F:0013 CD21 INT 21129F:0015 B44C MOV AH,4C129F:0017 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

45、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 ;执行程序后查看执行程序后查看 datadata段内容段内容 129D:0000 50 6C 65 61 73 65 20 49-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

46、 00 00 00 .Hello!.-56data段内存情况:段内存情况:striPlease Input:$0B06 Hello!0D 00 00 00 00 00 00 00 00max57思考:思考:程序中少了一个程序中少了一个$符的后果。符的后果。data SEGMENT stri DB Please Input:max DB 11,?,11 DUP(?)data ENDScode SEGMENT ASSUME CS:code,DS:datastart:MOV AX,data ;置缓冲区地址于置缓冲区地址于DS:DX MOV DS,AX LEA DX,stri MOV AH,09H ;

47、显示提示显示提示 INT 21H LEA DX,max ;等待从键盘输入等待从键盘输入 MOV AH,0AH INT 21H MOV AH,4CH INT 21H code ENDS END start58data SEGMENT stri DB Please Input:max DB 11,?,11 DUP(?)data ENDSstriPlease Input:0B 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00maxB8 A8 12 8E D8 8D 16 00 00 B4 09 CD 21 8D 16 0Estart 注意:注意:09

48、H功能只在遇到功能只在遇到$符才结束显符才结束显示示。595检测键盘状态检测键盘状态(0BH功能功能)入口参数入口参数 无无功能号功能号 AH=0BH类型号类型号 21H出口参数出口参数 AL=FFH,表示有键按下。表示有键按下。AL=0 ,表示无键按下。表示无键按下。实现功能实现功能 检测键盘状态检测键盘状态(通过检测键盘缓冲区实现通过检测键盘缓冲区实现)60例例 利用利用0B功能实现按键退出循环。功能实现按键退出循环。、continue:、MOV AH,0BH ;检测键盘缓冲区是否有键按下检测键盘缓冲区是否有键按下 INT 21H CMP AL,0FFH JNZ continue ;无键按

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

50、的中断向量63方法二方法二:用变量保存中断向量用变量保存中断向量 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,BX647.设置中断向量设置中断向量(25H功能功能)入口参数入口参数 AL =要设置向量的中断类型号要设置向量的中断类型号N DS:DX=中断子程的入口地址中断子程的入口地址(中断向量中断向量)功能号功能号 AH =25H 类

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com