




免费预览已结束,剩余62页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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功能 ) (第六章介绍) 7设置中断向量 ( 25h功能 ),2,3,第五节 bios和dos中断功能调用 (教材旧p238、新p239) 一、概述 二、bios功能调用 三、 dos系统功能调用 ( 21h类型中断调用 ),4,一、概述 1bios 和 dos 中断子程层次特点 2. 中断类型分类 3. 调用方法,5,1bios和dos中断子程层次特点,6,层次特点: rom bios中的中断子程 使用in/out指令直接控制外设, 实现与外设之间的输入/输出操作, 以软件形式向其上层提供服务。 io.sys中的中断子程 ( 称基本输入/输出bios模块) 调用rom bios的基本i/o功能, 向 msdos.sys提供设备驱动服务。,7,msdos.sys中的中断子程 ( 称dos内核模块 ) 调用io.sys,实现对外设的控制。 与标准外设有两层隔离 : io.sys和rom bios。 其中: 21h类型的中断子程 提供了丰富的系统服务, 称21类型的中断调用 为dos系统(功能)调用。,8,用户编程原则 尽可能使用dos的系统功能调用, 提高程序可移植性。 在dos功能不能实现情况下, 考虑用bios功能调用。 在dos和bios的中断子程 不能解决问题时, 使用in/out指令直接控制硬件。,9,2. 中断类型分类 向量表中的中断类型分为七类: 处理cpu特殊操作( 除0、溢出 )的00h、04h类型。 为debug调试程序设置的单步( 01h )、断点( 03h )类型。 处理cpu的nmi引脚信号的02h类型。 非屏蔽硬中断子程 处理cpu的intr引脚信号的080fh类型。 可屏蔽类型硬中断子程 用int指令调用的中断子程 bios功能调用(如101ah) dos功能调用 (如 21h),10,11,中断向量分配表,12,中断向量分配表 ( 续),13,中断向量分配表 ( 续),14,3. 调用方法,15,例1 单字符显示功能调用 mov dl, a ;设置入口参数 mov ah, 02h ;设置功能号 int 21h ;执行中断调用 例2 单字符输入功能调用 mov ah, 01h ;设置功能号 int 21h ;执行中断调用 cmp al, 0dh ;分析、应用出口参数 jz exit 、,16,二、bios功能调用 基本输入/输出模块bios: 实现对输入/输出设备的控制, 内含0 1ch 等类型中断子程, 包括显示器、磁盘、键盘、打印机等标准外设的驱动程序。 (参看中断类型分配表) bios功能调用指对bios模块中的中断子程的调用。,17,有关显示器 显示器通过显卡(显示适配器)连接到计算机上。 单色显示器只能显示黑白两色。 彩色显示器能显示多种颜色。,18, 屏幕上各象素的显示信息,存放在显示缓冲区(显存)中。,19, 显示器有两种显示方式:,图形方式: 将屏幕划分为 mn的点阵,在每个点的位置显示象素, 一个点是一个象素。,文本方式 将屏幕划分为若干行和列,在每个网格位置上显示象素, 一个字符是一个象素。,20,文本方式 将屏幕划分为 m列和n行 (m n),在每个网格位置上显示象素, 一个字符是一个象素。,21,图形方式: 将屏幕划分为 mn的点阵,在每个点的位置显示象素, 一个点是一个象素。,22,在文本方式下, 对应屏幕上的每个字符, 在显示缓冲区中占用两个单元: 一个存放ascii码, 一个存放显示属性。,23,24,据显存大小,可存储若干页的字符象素。 例 16kb 显存能存储: 8025方式,4页( 0 3 ), 802524 =16000 4025方式,8页( 0 7 ), 402528 =16000,25,26,27,例 清除屏幕显示,将其属性置为反白(白底黑字)显示。 mov al, 0 ;清屏功能 mov bh, 70h ;白底黑字 mov ch, 0 ;左上角 行号 mov cl, 0 ;左上角 列号 mov dh, 24 ;右下角 行号 mov dl, 79 ;右下角 列号 mov ah, 6 ;功能号 int 10h ;中断调用,28,29,置光标位置 入口参数 dh = 行号 dl = 列号 bh = 页号 功能号 ah= 02h 类型号 10h 出口参数 无 实现功能 将光标设置在指定的位置,30,例 将光标设置在2行5列的位置 mov dh, 2 mov dl, 5 mov bh, 0 mov ah, 2 int 10h,31,三、dos系统功能调用 (21h类型中断调用) 1显示单字符 ( 02h功能 ) 2显示字符串 ( 09h功能 ) 3单字符输入 ( 01h、07h、08h功能 ) 4字符串输入 ( 0ah功能 ) 5检测键盘状态 ( 0bh功能 ) 6保存中断向量 ( 35h功能 ) (第六章介绍) 7设置中断向量 ( 25h功能 ),32,1. 显示单字符 ( 02h功能 ) 入口参数 dl = 要显示字符的ascii 码 功能号 ah=02h 类型号 int 21h 出口参数 无 实现功能 显示指定字符,光标随动。,例 显示字符a mov dl, a mov ah, 02h int 21h,33,例 使光标回到下一行的行首。 mov dl , 0dh ;显示回车符 mov ah , 02h int 21h mov dl , 0ah ;显示换行符 mov ah , 02h int 21h,34,2. 显示字符串 ( 09h功能 ) 入口参数 定义要显示的字符串, 字符串尾应为$,作为结束显示的标志。 ds : dx = 字符串的首地址 功能号 ah = 09 h 类型号 21h 出口参数 无 实现功能 显示字符串,遇 $ 停止显示,光标随动。,35,例 编程显示字符串 tsinghua university,data segment ;定义显示的子符串 stri db tsinghua university, $ data ends code segment assume cs:code, ds:data start: mov ax, data ;置缓冲区地址于ds:dx mov ds, ax lea dx, stri mov ah, 09h ;调显示功能 int 21h mov ah, 4ch ;返回dos int 21h code ends end start,36,有关键盘 键盘通过键盘接口电路与计算机连接。 键盘上的键有三种类型: 字符键 az, 09等 功能键 f1f12, page up等 组合控制键 shift, ctrl, alt等, 键盘上的每个键都有一个扫描码。 据扫描码可确定操作的是哪个键、是按下键还是释放键; 扫描码用一个字节表示。 低7位是扫描码的数字编码, 与键盘上的键一一对应; 最高位d7位表示键的操作状态: 当按下键时, d7=0 ; 当释放键时, d7=1,37, 键盘中断子程功能(09h类型中断子程) 从键盘接口读取操作键的扫描码; 将扫描码转换成字符码; 大部分键的字符码为ascii码, 无ascii码键(如组合键shift、ctrl等)的字符码为0。 将键的扫描码、字符码存放在键盘缓冲区, 供其它有关键盘的中断子程应用。, 键盘接口对按下键和释放键均向计算机发出中断申请, 如果中断响应条件满足, cpu转去执行键盘中断子程。 键盘中断子程类型号为09h。,38,3. 单字符输入 ( 01h、07h、08h功能) 入口参数 无 功能号 ah = 01h 类型号 21h 出口参数 al = 键入字符的ascii码 实现功能 等待从键盘输入一个字符, 并在屏幕上回显,光标移动, 检测ctrl-break键,39,例 利用键盘输入的字符产生分支: mov ah, 1 ;等待从键盘输入 int 21h cmp al, y ;是y? jz yes cmp al, y ;是y? jz yes no: . . . . . . jmp exit yes: . . . . . . exit: . . .,40,例 在中断向量表中查找从键盘输入的字符, 并将其个数用二进制形式显示出来。( scanskey.asm),41, 入口参数 无 功能号 ah = 07h 类型号 21h 出口参数 al = 键入字符的ascii码 实现功能 等待从键盘输入一个字符, 不在屏幕上回显, 不检测ctrl-break键,42,例 用不带回显功能输入密码时: input: mov ah, 07h ;等待从键盘输入 int 21h mov di, al ;存入缓冲区 cmp al, 0dh ;是回车符? jnz input ;不是,继续输入 check: 、 、,43,4. 字符串输入 ( 0ah 功能 ) 入口参数 ds : dx = 缓冲区的首地址 ( ds :dx ) = 限制最多输入的字符数 功能号 ah = 0ah 类型号 21h 出口参数 ( ds : dx+1 ) = 实际键入的字符(不含回车符) 从( ds : dx+2 )开始顺序存放键入的字符串, 回车符0dh为串尾最后一字符。 实现功能 等待从键盘输入字符串,并存入设定的缓冲区内, 同时回显字符串,光标随着移动, 回车符使光标回到行首。 注意事项:应按要求先定义缓冲区,再调用。,44,例 应用0ah功能输入字符串。,data segment ;定义缓冲区 max db 11 ;定义限制最多输入个数 lenth db ? ;用于存放实际输入个数 stri db 11 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 ;调0a输入功能 mox ch , 0 mov cl , lenth ;取字符串长度放cx中 lea bx , stri ;取字符串首址于bx中 mov al , bx ;应用输入字符 、 code ends,45,data segment ;定义缓冲区 max db 11 ;定义限制最多输入个数 lenth db ? ;用于存放实际输入个数 stri db 11 dup(?) ;用于存放输入的字符串 data ends 从键盘输入abcd, 回车,内存的存放结果:,46,47,48,0ah功能执行过程: 若(ds:dx)字节单元的值为0,则不等待从键盘输入,结束调用。 若(ds:dx) 字节单元的内容大于0,则等待从键盘输入, 并把输入键的ascii码顺序存放在ds : dx+2开始的单元, 按回车键表示结束输入。 当按下键的个数超过( ds : dx )中值,发出警告声 嘟嘟 , 不再接收输入的数据, 直到输入回车键。 将实际输入的字符个数(不包括回车键)填入(ds:dx+1), 结束调用。,49,0ah功能注意事项: 输入的字符均带回显,且光标随字符移动。 当输入回车符结束时,也回显回车符。 表现为功能调用结束后,光标回到了行首。 回车符0dh作为一个输入的字符存放在字符串尾, 但计数输入个数时,不包括回车键。 实际最多能输入的字符数 = 限制的最多数-1 (回车符占一个) 执行完0ah功能后,ds和dx的值不变, ds:dx仍指向缓冲区的首地址。 整个缓冲区的大小应为:限制的最多数 +2 max db 11, ? , 11 dup (?),50,例 利用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 ds, 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,51,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 cd21 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:0000 0b 05 48 65 6c 6c 6f 0d-00 00 00 00 00 00 00 00 hello. -,52,思考: 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 start,53,结果是:不等待输入,结束0ah功能调用。,54,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,55,结果是:不等待输入,结束0ah功能调用。,56,57,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: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 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 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 00 00 00 .hello!. -,58,data段内存情况:,59,思考:程序中少了一个 $ 符的后果。,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 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,60,61,5检测键盘状态 ( 0bh功能 ) 入口参数 无 功能号 ah= 0bh 类型号 21h 出口参数 al= ffh , 表示有键按下。 al= 0 , 表示无键按下。 实现功能 检测键盘状态(通过检测键盘缓冲区实现),62,例 利用0b功能实现按键退出循环。 、 continue: 、 、 、 mov ah, 0bh ;检测键盘缓冲区是否有键按下 int 21h cmp al, 0ffh jnz continue ;无键按下继续
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信用评分模型国际比较-洞察及研究
- 汇率风险传导机制-洞察及研究
- 会计准则国际趋同路径-洞察及研究
- 2025瓷砖绿色建材认证与技术支持合同
- 2025版自然人个人房屋装修贷款合同
- 2025版企业员工培训需求分析与规划咨询合同
- 2025年度环保法律法规咨询服务合同集合
- 2025房地产项目认筹与室内设计施工服务合同
- 2025版食品厂员工加班补贴合同范本
- 2025年住房贷款保险借款合同
- 2025年湖南省国际工程咨询集团有限公司招聘笔试参考题库附带答案详解
- 中小学违规办学行为治理典型案例与规范要求
- 血液透析中心护士手册
- 高一年级英语学法指导市公开课一等奖省赛课获奖课件
- 2024年《防治煤与瓦斯突出细则》培训课件
- 2024-2025学年人教精通版四年级英语上册全册教案
- 运维巡检服务方案
- 河南航空港发展投资集团招聘笔试真题2024
- 微机五防系统培训课件
- 心脏骤停后高质量目标温度管理专家共识2024
- 气道解剖知识
评论
0/150
提交评论