ImageVerifierCode 换一换
格式:PPT , 页数:119 ,大小:915.50KB ,
资源ID:1157277      下载积分:10 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-1157277.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编第五章.ppt)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

汇编第五章.ppt

1、CompanyLOGO第五章第五章第五章第五章 输入输出与中断输入输出与中断输入输出与中断输入输出与中断电子工业出版社第五章第五章第五章第五章 输入输出与中断输入输出与中断输入输出与中断输入输出与中断5.1I/O概述15.2简单I/O程序举例25.3中断系统35.4中断服务程序设计45.5DOS与BIOS功能调用55.1 I/O5.1 I/O概述概述CPU与外部设备交换信息是计算机系统中十分重要和十分频繁的操作。对于系统中的每一台外设,都需要通过I/O接口实现与CPU的连接。I/O接口通常含有三类寄存器:设备状态寄存器、设备控制寄存器和设备数据寄存器。5.1.1 I/O概述概述5.1 I/O5

2、.1 I/O概述概述数据寄存器它保存处理器与外设间交换的数据;控制寄存器处理器通过它对外设进行控制,也称命令寄存器;状态寄存器外设的当前工作状态通过它向处理器提供。5.1 I/O5.1 I/O概述概述外设数据处理器输入输出设备控制寄存器状态寄存器数据寄存器图5-1 I/O接口示意图数据总线控制总线地址总线状态信号控制信号5.1 I/O5.1 I/O概述概述I/O端口是CPU与输入输出设备的交换数据的场所。端口在I/O空间中均被指定一固定地址,这种寻址方式就被称为端口寻址。在80 x86微机中,I/O端口与存储器地址完全分开,编址在一个独立的地址空间中,端口地址为0000HFFFFH,目前大多数

3、微机所用的端口地址都在03FFH范围之内。5.1.2 I/O端口端口5.1 I/O5.1 I/O概述概述表5-1 I/O端口地址分配I/O地址地址功能功能I/O地址地址功能功能00H0FHDMA控制器控制器8237A2E0H2E3H2E3HEGA/VGA使用使用20H3FH3FH中断控制器中断控制器8259A2F8H2FEH2FEH2号串行口号串行口(COM2)40H5FH5FH定时定时/计数器计数器8253A320H324H324H硬盘适配器硬盘适配器60H7FH7FH并行接口芯片并行接口芯片8255A372H377H377H软盘适配器软盘适配器80H9FH9FHDMA页面寄存器页面寄存器3

4、78H37AH37AH2号并行口号并行口A0HBFHBFH不可屏蔽中断寄存不可屏蔽中断寄存器器380H38FH38FHSDLC及及BSC通信通信170H1F7H1F7H硬盘控制器硬盘控制器3BCH3BEH3BEH1号并行口号并行口200H20FH20FH游戏控制端口游戏控制端口3F0H3F7H3F7H软盘控制寄存器软盘控制寄存器278H27AH27AH3号并行口号并行口3F8H3FEH3FEH1号并行口号并行口(COM1)5.1 I/O5.1 I/O概述概述(1)输入指令格式:INAL/AX,PortNo/DX作用:从端口中读入一个字节或字,并保存在寄存器AL或AX中。如果某输入设备的端口地址

5、在0255范围之内,那么,可在指令IN中直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来给出其端口地址。5.1.3 I/O指令指令 5.1 I/O5.1 I/O概述概述例:inal,35h;从端口35h读入一个字节到al中inax,0a8h;把端口0a8h、0a9h组成的字读入axmov dx,312hinal,dx;从端口312h读入一个字节到al中inax,dx;把端口312h、313h组成的字读入ax5.1 I/O5.1 I/O概述概述(2)输出指令格式:OUTPortNo/DX,AL/AX作用:把寄存器AL或AX的内容输出到指定端口。如果某输出设备的端口地址在02

6、55范围之内,那么,可在指令OUT中直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来给出其端口地址。5.1 I/O5.1 I/O概述概述例:out40h,al;把al的内容输出到端口40h中out30h,ax;把ax的内容输出到端口30h、;31h中mov dx,310houtdx,al;把al的内容输出到端口310h中outdx,ax;把ax的内容输出到端口310h、;311h中5.1 I/O5.1 I/O概述概述外设通过端口与CPU交换数据,有四种数据传送方式:主要由软件程序控制的无条件传送方式查询传送方式中断方式主要由硬件完成的DMA方式。5.1.4 I/O控制方式

7、控制方式 5.1 I/O5.1 I/O概述概述(1)无条件传送方式CPU不需要查询外设的状态,I/O操作可以随时进行,这种方式称为无条件传送或称为程序直接控制输入输出方式。特点:无条件传送是最简单的数据传送方式,它所需要的硬件和软件都是最节省的,但这种方式必须在已知并确信外设已处于准备就绪的情况下才能使用,否则就会出错。5.1 I/O5.1 I/O概述概述(2)查询传送方式无条件传送方式虽然简单,但是只适用于特定场合,如果采用无条件方式传送数据,而没有准确地知道外设是否真正做好了接收或发送数据的准备工作,就可能产生数据的误传。可在数据传送前,对外设的状态先进行检测,只有在确认外设准备就绪后,才

8、进行数据的传送;否则,就应等待外设达到“就绪”状态,再进行数据传送。这就是查询传送方式。5.1 I/O5.1 I/O概述概述图图5-2查询式查询式I/O传送方式流程图传送方式流程图准备就绪?准备就绪?进行传送进行传送NY读设备状态读设备状态查询开始查询开始5.1 I/O5.1 I/O概述概述例:如从外围设备端口输入并存入内存一组数据,外设中数据寄存器用来存放要传送的数据,而状态寄存器用来存放表示设备所处状态的信息,其第7位为就绪位(READY)。当“READY”为1时,表明要输入的数据已准备好,此时可以从数据寄存器输入数据到AL中,用IN指令从数据寄存器输入数据,“READY”立即自动变为0,

9、以便下一次输入数据。5.1 I/O5.1 I/O概述概述movcx,100movbx,0100HL1:inal,status_port;从状态寄存器输入状态信息testal,80h;检查“READY”位是否就绪jzL1;未就绪,转L1等待inal,data_port;就绪,从数据寄存器读入数据;到almovbx,al;外设数据写入内存incbxloopL15.1 I/O5.1 I/O概述概述(3)中断传送方式在查询传送方式中,CPU不停地查询外设,实际上是一种时间的浪费。外设未准备好时,CPU要等待,不能做别的工作,CPU自始至终与外设串行工作。当CPU速度越高,与外设低速度的矛盾就越突出。5

10、.1 I/O5.1 I/O概述概述当输入设备已将数据准备好,或者输出设备可以接收数据时,便向CPU发出中断请求,CPU可中断正在执行的程序而和外设进行一次数据传输。待输入操作或输出操作完成后,CPU再恢复执行原来的程序,这种方式叫中断方式。特点:CPU与外设是并行工作的,从而提高了CPU的利用率。当然CPU还可以与多台外设并行工作。不过,出于每中断次,传送一次数据,其效率并不高。因此,中断传送方式一般适用低速I/O设备。5.1 I/O5.1 I/O概述概述(4)DMA方式中断传送方式虽然使CPU的效率大大提高,但是其传送过程却较为繁杂。为传送一个字符不仅要执行一次中断服务程序,还要增加诸如保护

11、和恢复现场等辅助性操作。因此,当主机与外设成批交换数据时,采用中断传送方式,数据传送的效率就会降低,影响了机器运行的效能。5.1 I/O5.1 I/O概述概述内存储器RAM和外存储器(如磁盘等)在机器工作期间,经常需要大批量地交换数据(读写磁盘完成磁盘文件的存取),在RAM和外设之间直接建立数据通道,这样就无需CPU的介入就可完成数据的传送,这样方式称为直接存储器存取方式,即DAM传送方式。在DMA传送方式中,由DMA控制器(DMAC)直接从CPU接管并控制系统总线,进行高效率的数据传送,待数据传送完后,DMA控制器再将总线控制权交还给CPU。5.2 5.2 简单简单I/OI/O程序举例程序举

12、例 【例5-1】用一个8位输出锁存器控制8个发光二极管,使发光管依次一个一个地闪亮,每个发光管亮一段规定的时间。设输出锁存器的地址为84H。分析:发光二极管是一种简单的外设,可以认为它是始终就绪的,只要程序将控制码写入到输出锁存器,发光二极管发光便能按输出锁存器中指定的控制码发光。因此,可以采用无条件传送方式编写控制程序如下:5.2 5.2 简单简单I/OI/O程序举例程序举例start:moval,01h;控制代码01halnext:out84h,al;(al)84hcalldelay;延时一定时间rolal,1;控制代码循环左移1位jmpnext;无条件转next继续程序循环delay:p

13、roc;定义延时子程序pushaxmovax,counttime:decaxjnztimepopaxret;返回调用程序delayendp;子程序调用结束5.2 5.2 简单简单I/OI/O程序举例程序举例【例5-2】假设在计算机第1个并行口上接有一台打印机,利用并行口的三个端口地址378H、379H、37AH,设计程序打印如下字符串:Printcharacterprogram。分析:本程序采用查询传送方式反复读取打印机的状态,通过程序测试来控制输出。在打印机接口中,数据寄存器的端口地址为378H,状态寄存器的端口地址为379H,控制寄存器的端口地址为37AH,它们各位的功能如图5-3所示。5

14、.2 5.2 简单简单I/OI/O程序举例程序举例7 6 5 4 3 2 1 0控制寄存器工作方式(0=禁止中断方式)自动换行(1=换行)选择位(1=接通)初始化(1=正常)选通(1=输出数据)图5-3 打印机的状态寄存器和控制寄存器7 6 5 4 3 2 1 0状态寄存器忙位(0=忙)应答(0=可接受)打印出错(0=出错)纸出界(1=出界)联机状态(1=联机)5.2 5.2 简单简单I/OI/O程序举例程序举例图5-4程序流程图打印机忙?378H待打印字符YN(AL)379H 端口状态字37AH打印机选通信号37AH打印机选通生效5.2 5.2 简单简单I/OI/O程序举例程序举例datas

15、egmentbufdbPrintcharacterprogram,0DH,0AHdataendscodesegmentassumeds:data,cs:codeBEGIN:movax,datamovds,axleasi,bufL1:moval,sicallP1cmpal,0ahjzEXITincsijmpL1EXIT:movah,4chint21h5.2 5.2 简单简单I/OI/O程序举例程序举例P1:procnearpushdxpushaxmovdx,379h;查询状态W1:inal,dxtestal,80hjzW1popaxmovdx,378h;打印机数据寄存器端口(DX)outdx,a

16、l;待打印字符数据寄存器movdx,37ah;打印机状态寄存器端口(DX)moval,0dh;控制字(AL)outdx,al;发选通信号moval,0ch;控制字(AL)outdx,al;发选通信号popdxretP1endpcodeendsendBEGIN5.2 5.2 简单简单I/OI/O程序举例程序举例【例5-3】假设从某输入设备上输入一组数据送缓冲区,若缓冲区已满则显示信息“BUFFEROVERFLOW”,然后结束。设该设备的端口地址如下:启动端口地址:FCH数据端口地址:F8H状态端口地址:FAH分析:对于这个输入设备,首先由程序控制启动该设备,然后检查数据是否准备就绪,若输入数据准

17、备好,则可输入,否则等待并查询,直到输入设备推备好,才能进行数据输入。每输入一组数据后,应检查缓冲区是否满,不满则进行下一个数据的输入,若缓冲区已满,则显示信息“BUFFEROVERFLOW”,然后程序结束。查询式输入控制程序如下:5.2 5.2 简单简单I/OI/O程序举例程序举例.modelsmall.stackstapndw100dup(?)topequlengthstapn.datamessidbbufferoverflow,$buffdb60dup(?).code.startupmov bx,offsetbuff;送缓冲区指针mov cx,60;送计数初值out 0fch,al;启动

18、设备5.2 5.2 简单简单I/OI/O程序举例程序举例wait:inal,0fah;查询状态,ready=0,则等待testal,01hjzwaitinal,0f8h;输入数据mov bx,alincbxloop wait;检测缓冲区是否满,不满再输入mov dx,offsetmessi;缓冲区满,输出标志字符串mov ah,09hint21h.exit0end5.3 5.3 中断系统中断系统 所谓中断就是当某种紧急事件发生时,CPU暂停正在执行的程序转而执行去处理紧急事务的程序(中断服务程序),处理完后再返回到被中断程序的断点处,继续往下执行的过程。引起中断的事件或能发现中断申请的来源称为

19、中断源。80 x86的中断源可分为外部中断和内部中断两大类。5.3.1 5.3.1 中断和中断源中断和中断源5.3 5.3 中断系统中断系统外部中断:CPU外部事件引起,通常是各种外设的输入输出请求,有两种外部中断请求:NMI(不可屏蔽中断源)和INTR(可屏蔽中断源)。NMI由硬件故障引起,不受标志位IF的影响,再当前指令执行完后,CPU相应。INTR由外部各种外设请求中断而产生,CPU是否相应取决于标志位IF的状态,当CPU处于开中断状态(IF=1)时,能够响应外设的中断请求;当CPU处于关中断状态(IF=0)时,CPU不响应外设的请求。内部中断:内部中断来自CPU内部,其特点是不需要外部

20、硬件支持,不受中断允许标志IF的限制,由除法出错、溢出中断INTO、单步中断、软件中断INTn四种。5.3 5.3 中断系统中断系统CPU在执行程序时,是否响应中断要取决于以下三个条件能否同时满足:(1)有中断请求;(2)CPU允许接受中断请求;(3)当前指令执行完毕。程序员可用程序部分地控制条件(2)是否满足,即可用指令STI和CLI来允许或不允许CPU响应可屏蔽的外部中断。而对于不可屏蔽中断和内部中断,程序员是无控制权的,CPU一定会予以响应。5.35.3中断系统中断系统80 x86系统规定的各中断源的优先级顺序如下:除法出错INTOINTnNMIINTR单步中断当多个中断源发出中断请求信

21、号时,CPU根据其优先级次序,首先响应最高级的中断请求,完成该中断处理后,再响应次高级的中断请求。5.3 5.3 中断系统中断系统一个完整的中断处理过程,包括如下五个环节:中断请求中断判优中断响应中断处理中断返回5.3.2 中断处理过程中断处理过程 5.35.3中断系统中断系统1.中断请求中断请求是由中断源向CPU发出中断请求信号。外部设备发出中断请求信号要具备以下两个条件:(1)外部设备的工作已经告一段落,即准备好要输入的数据或处理完系统输出的数据之后,才可以向CPU发出中断请求。(2)系统允许该外设发出中断请求。如果系统不允许该外设发出中断请求可以将这个外设的请求屏蔽。当这个外设中断请求被

22、屏蔽,虽然其准备工作已经完成,页不能发出中断请求。5.3 5.3 中断系统中断系统2.中断判优中断判优也称中断排队,通常是由中断控制器实现,处理速度比较快。也可以采用软件查询的方式实现。3.中断响应经中断排队后,CPU收到一个当前申请中断的中断源中优先级别最高的中断请求信号,如果允许CPU相应中断(IF=1),在执行完当前指令后,就终止执行现行程序,而响应中断申请,与外设进行数据交换,即执行中断服务程序。5.3 5.3 中断系统中断系统4.中断处理中断响应后,进入中断处理,执行中断服务程序。在中断服务程序中,首先要保护现场,把中断服务程序中所要用到的寄存器内容保护起来,如将它们的内容压入堆栈,

23、然后才进行与此次中断有关的服务处理。处理完毕要恢复现场,即恢复中断前各寄存器的内容。如果在中断服务程序中允许嵌套,还应用STI指令将IF置为1(即开中断)。5.中断返回通常,中断服务程序的最后一条指令是一条中断返回指令(IRET)。当CPU执行这条指令时,把原来程序被中断的断点地址从堆栈中弹回CS和IP中,原来的FLAGS弹回FLAGS。这样,被中断的程序就可以从断点处继续执行下去。CPU从中断服务程序又回到了被中断的主程序。5.3 5.3 中断系统中断系统80 x86微机系统能处理256种类型的中断,同时给每种中断安排了一个中断类型号,即00H0FFH号中断,每种类型的中断都有相应的中断处理

24、程序。如何有效地管理如此多的中断及其对应的中断处理程序呢?CPU是如何根据中断源找到要调用的中断处理程序的入口地址呢?5.3.3 中断向量表中断向量表 5.3 5.3 中断系统中断系统中断向量表是一个特殊的线性表,它保存着系统所有中断服务程序的入口地址(偏移量和段地址),这个入口地址称为中断向量,所以,中断向量表就是存放中断向量的表。在微机系统中,该向量表有256个元素(00FFH),每个元素占4个字节,前两个字节用来存放入口地址的偏移地址,后两个字节用来存放入口地址的段地址,总共1K字节。其在内存中的存储形式及其存储内容如图所示。5.3 5.3 中断系统中断系统0#中断处理程序入口1#中断处

25、理程序入口2#中断处理程序入口255#中断处理程序入口00000H00004H00008H003FCH003FFHIPL 10 IPH 20CSL 30CSH 402#入口地址图5-5 中断向量表结构2#中断处理程序中断向量表4030:2010H5.3 5.3 中断系统中断系统当CPU获得中断号后,便可根据此值,转入相应的中断服务程序去执行,不管中断是由哪类中断源引发的,CPU都不加区别地转入中断服务程序,过程如下:将标志寄存器FLAGS入栈;清除中断标志(IF=0)、单步标志(TF=0);将程序当前代码段地址CS和指令偏移地址IP依次入栈;根据中断号n,计算中断向量的首地址0000:n4;根

26、据中断向量表首地址,取出4个字节的中断向量,并分别置入CS和IP中,CPU便转而执行相应的中断服务程序。5.3 5.3 中断系统中断系统中断服务程序的一般结构如下:保护现场中断处理恢复现场开中断中断返回中断和子程序调用之间的主要差异有:子程序调用一定是程序员在编写源程序时事先安排好的,是可知的,而中断是由中断源产生的,是不可预见的;子程序调用是用CALL指令来实现的,但没有调用中断的指令,只有发出中断请求的事件;子程序的返回指令是RET,而中断服务程序的返回指令是IRET。在通常情况下,子程序是由应用系统的开发者编写的,而中断服务程序是由系统软件设计者编写的。5.3.4中断服务程序中断服务程序

27、 5.4 5.4 中断服务程序设计中断服务程序设计 中断服务程序设计分为主程序设计和中断服务程序设计两部分。1.主程序设计如果主程序在运行过程中允许响应中断,则主程序在响应中断前应做好对中断系统的初始化工作,包括CPU本身的初始化、中断控制器8259A的初始化和通用外设接口的初始化三部分工作。(1)CPU部分。设置堆栈指针(SS和SP),设置中断向量和开放中断。(2)中断控制器8259A部分。选择8259A的工作方式,修改中断屏蔽寄存器的内容。(3)通用外设接口部分。选择接口的工作方式和设置接口的中断开放位等。5.4.1 中断服务程序设计基本方法中断服务程序设计基本方法 5.4 5.4 中断服

28、务程序设计中断服务程序设计在中断过程中主程序要完成三个工作:中断向量的设置;设备中断屏蔽字的设置;开中断。2.中断服务程序设计中断服务程序的基本结构如下:子程序名PROCFAR程序体IRET程序名ENDP程序体又分为如下几部分:保护现场;如允许中断嵌套,则开中断(STI);中断服务;关中断(CLI);结束中断(EOI);恢复现场;IRET。5.4 5.4 中断服务程序设计中断服务程序设计中断服务程序的加载通常有两种方法,一种是直接设置中断向量,另一种是通过系统功能调用方法设置中断向量。(1)直接设置中断向量)直接设置中断向量程序员可以通过直接设置中断向量的方法来修改中断向量表,实现中断服务程序

29、的加载。假设中断服务程序为INT_HANDLER,可以将INT_HANDLER地址的段址与偏移量分别放在AX和BX寄存器中,DI存放中断号n,DI4即是4n,然后将BX内容存于4n,AX内容存于4n+2,即完成了将中断服务程序入口地址装入中断向量表的任务。5.4.2中断服务程序的加载中断服务程序的加载 5.4 5.4 中断服务程序设计中断服务程序设计INT_HANDLERprocfariretINT_HANDLERendpINT_INTprocfarpushaxpushbxpushdipushessubax,axmoves,axmovbx,offsetINT_HANDLERmovax,segI

30、NT_HANDLER5.4 5.4 中断服务程序设计中断服务程序设计movdi,nshldi,1shldi,1moves:di,bxmoves:di+2,axpopespopdipopbxpopaxretINT_INTendp5.4 5.4 中断服务程序设计中断服务程序设计(2)利用系统功能调用()利用系统功能调用(INT 21H)设置中)设置中断向量断向量中断21H的功能25H就是将中断服务程序的入口地址置于中断向量表中,格式如下:入口参数:AH=25HAL中断号DS中断服务程序的入口段址DX=中断服务程序入口偏移地址出口参数:无5.4 5.4 中断服务程序设计中断服务程序设计INT_HAN

31、DLERprocfariretINT_HANDLERendpINT_INTprocfarpushdspushaxpushdxmovax,segnewfuncmovds,ax;设置段地址寄存器movdx,offsetnewfunc;设置偏移量5.4 5.4 中断服务程序设计中断服务程序设计moval,n;这里的n要用具体的中断号来定movah,25hint 21hpopdxpopaxpopdsretINT_INTendp5.4 5.4 中断服务程序设计中断服务程序设计(3)中断重定向解决的办法是先将老的入口地址读出保存在两个变量中。运行完用户的中断服务程序,再将老的入口地址写回去。将一个中断号的

32、地址读出可以由DOS内核中断21H功能35H完成,它的参数与返回值如下:入口地址:AH=35HAL=中断号返回值:ES=中断例程的入口地址BX=偏移量5.4 5.4 中断服务程序设计中断服务程序设计intnoequ40h;假设被修改的中断号oldaddrdd?newfunc proc;用户编写的新的中断处理程序iretnewfunc endp5.4 5.4 中断服务程序设计中断服务程序设计;以下是用户编写的主程序moval,intnomovah,35hint21hmovwordptroldaddr,bx;保存原入口地址movwordptroldaddr+2,esmovdx,offsetnewf

33、unc;设置新的入口地址movax,segnewfuncmovds,axmoval,intnomovah,25hint21h5.4 5.4 中断服务程序设计中断服务程序设计int40h;执行用户的中断处理newfuncmovdx,wordptroldaddr;恢复原入口地址movds,wordptroldaddr+2moval,intnomovah,25hint21hint40h;执行原来的中断处理程序5.4 5.4 中断服务程序设计中断服务程序设计中断可分为硬件中断和软件中断两大类。5.4.3 中断功能分类中断功能分类 用户程序DOS功能调用硬件及外设接口BIOS中断调用图5-6 各类中断间

34、的层次关系5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用 DOS系统和ROMBIOS系统为用户提供了一组例行子程序,用于完成基本I/O设备(如CRT显示器,键盘,打印机,软盘,磁盘,磁带等)的输入输出控制,需要特别指出的是,对这些例行子程序的调用都是通过软中断指令来实现的。5.5.1 调用方式调用方式 5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用对BIOS和DOS的调用一般均需经过以下三个步骤:将入口参数送指定的寄存器;将功能调用号送AH寄存器;执行软中断指令INTn调用相应的功能子程序。其中软中断指令INT中的

35、n值因子程序不同而可能不同。5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(1)输入并显示字符()输入并显示字符(01H号功能调用)号功能调用)功能描述:从标准输入设备(如键盘)输入一个字符,并将其ASC码值送入AL寄存器,同时将该字符显示在屏幕上。入口参数:无调用方式:MOVAH,01HINT21H出口参数:AL中为输入字符的ASCII码5.5.2 DOS DOS功能调用功能调用 5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用【例5-4】编写程序实现从键盘输入字符,判断输入的字符是否为“Y”或“y”,是则退出,否

36、则,重新等待键盘输入:.modelsmall.code.startupagain:movah,01hint21hcmpal,y;是大写字母y么?jeexit;是则退出cmpal,Y;是小写字母Y么?jeexit;是则退出jmpagain;不是y和Y继续等待输入exit:.exit0;退出本程序,返回dosendagain5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(2)单字符输出()单字符输出(02H号功能调用)号功能调用)功能描述:将DL寄存器中的字符输出到标准输出设备入口参数:DL寄存器中存放要输出字符的ASCII码值调用方式:MOVAH,02HI

37、NT21H出口参数:无下面一段代码实现在屏幕上输出一个字符A:movah,02hmovdl,A;输出字符Cint21h5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(3)字符串输出()字符串输出(09H号功能调用)号功能调用)功能描述:将一个以$字符结尾的字符串输出到显示器入口参数:DS:DX指向内存中一个以$符结尾的字符串调用方式:MOVAH,09HINT21H出口参数:无5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用下面一段代码实现在屏幕上输出一个字符串”Hello!”.datastrdb”Hello!”,0d

38、h,0ah,$.codemovax,datamovds,axmovdx,offsetstrmovah,09hint21h5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(4)字符串输入子程序()字符串输入子程序(0AH号功能调用)号功能调用)功能描述:从键盘读入一行字符并将字符串存入缓冲区,用回车键结束字符串。若字符串各数超过规定的长度,则响铃并忽略超出长度的字符。入口参数:DS:DX输入字符缓冲区的首地址缓冲区由3部分组成,如下所述:第1字节,输入字符存放区的大小。第2字节,初始状态为空,从服务程序返回后,由服务程序填入实际输入的字符个数,不包括回车。第

39、3字节之后,输入字符存放区,存放输入的字符和回车。若实际输入的字符少于定义的字符,缓冲区内其余字节填0。调用方式:MOVAH,0AHINT21H出口参数:实际输入的字符数(不包括回车键)保存在缓冲区的第二字节;输入的字符串保存在缓冲区第三个字节开始的地方,最后一个字符总是回车键“ENTER”。5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用.databuffdb40;缓冲区大小(实际字符长度为39,还有一个回车符)db?;留作系统填入实际输入的字符个数db40dup(?);定义40个字节的存储空间.codemovdx,offsetbuffmovah,0ah

40、int21h对于上面的缓冲区,如果从键盘上输入ABCDE,从服务程序返回后,缓冲区各字节内容依次为:40,5,41H,42H,43H,44H,45H,0DH,5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(5)获取系统日期()获取系统日期(2AH号功能调用)号功能调用)入口参数:无调用方式:MOVAH,0AHINT21H出口参数:CX年(19802099),DH月(112),DL日(131)AL星期几(0Sunday,1Monday,.)(6)设置系统日期()设置系统日期(2BH 号功能调用)号功能调用)入口参数:CX年(19802099),DH月(11

41、2),DL日(131)调用方式:MOVAH,0AHINT21H出口参数:AL00H(设置成功),0FFH(设置失败)5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(7)获取系统时间()获取系统时间(2CH号功能调用)号功能调用)入口参数:无调用方式:MOVAH,0AHINT21H出口参数:CH时(023),CL分(059),DL秒(059),AL百分秒(099)(8)设置系统时间()设置系统时间(2DH 号功能调用)号功能调用)入口参数:CH时(023),CL分(059),DL秒(059),AL百分秒(099)调用方式:MOVAH,0AHINT21H出口

42、参数:AL00H(设置成功),0FFH(设置失败)5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用1、键盘中断(16H中断)(1)键盘状态字5.5.3 BIOS功能调用功能调用 5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(2)键盘中断处理过程(3)BIOS中的键盘输入在BIOS系统中,提供了中断16H来实现键盘输入功能。其具体的功能如下:1)输入字符不回显(功能00H和10H)入口参数:AH00H读普通键盘;AH10H读扩展键盘出口参数:AH键盘的扫描码AL字符的ASCII码5.5 5.5 DOS DOS与与与与

43、BIOSBIOS功能调用功能调用功能调用功能调用2)读取键盘状态(功能01H和11H)入口参数:AH01H检查普通键盘;AH11H检查扩展键盘出口参数:若ZF1无字符输入若ZF0则AH键盘的扫描码,AL按键的ASCII码。3)读取当前键盘状态字(功能02H和12H)入口参数:AH02H(普通键盘);AH12H(扩展键盘)出口参数:AL键盘标志(02H和12H都有效)AH扩展键盘的标志(12H有效)5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用【例5-5】用键盘最多输入10个字符,并存入内存变量Buff中,若按“Enter”键,则表示输入结束。.model

44、smallcrequ0dh;定义“回车”键.databuffdb10dup(?).code.startupmovcx,10leabx,buff.repeat5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用movah,0hint16h;调用bios的键盘输入中断功能.break.ifal=cr;按下“回车”键则退出循环movbx,alincbx.untilcxz;缓冲区未满,则继续输入.exit0end5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用2、鼠标中断(33H中断)(1)鼠标指针在文本方式下,指针是一个反相显示

45、的闪烁的方块;在图形方式下,指针是一个箭头。(2)Mickey测量鼠标移动的单位,约等于1/200in。(3)Michey计数鼠标球横向或纵向滚动的Michey的数量。鼠标驱动器用Michey来计算指针在屏幕上移动的像素数。(4)阈值速度阈值速度以Michey/s为单位,鼠标必须在屏幕上以双倍速度移动指针。默认的阈值移动速度是64Michey/s。程序中的所有鼠标操作都是由标准的INT33H功能来执行的,但不像其它的INT操作使用AH寄存器存放功能号,INT33H的功能号被装入整个的AX寄存器。5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用程序发出的第一

46、个鼠标功能应当是功能00H,它仅仅初始化鼠标驱动器和程序之间的接口。紧接着程序应当执行功能01H,它使鼠标指针出现在屏幕上。随后,可以在鼠标操作的范围内选择其它功能。(1)初始化鼠标入口参数:(AX)=00。出口参数:(AX)=00,则没有安装鼠标支持程序;(AX)=FFFFH,则安装了鼠标支持程序,(BX)=鼠标按键的数量。5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用初始化鼠标的操作步骤如下:1)设置鼠标指针到屏幕中央;2)如果鼠标指针是可见的,则隐蔽鼠标指针;3)设置鼠标指针的显示页为零;4)根据屏幕显示方式设置鼠标指针:文本方式为矩形及反相彩色,

47、图形方式为箭头;5)设置Michey于像素的比率,水平比率=8:8,垂直比率=16:8;6)设置指针的水平和垂直界限的最小值和最大值;7)设置倍带阈值为64Michey/s,该值可以改变。5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(2)显示鼠标指针入口参数:(AX)=01。(3)隐蔽鼠标指针入口参数:(AX)=02。(4)获取鼠标位置及其按键状态(功能03H)入口参数:无出口参数:CX水平位置DX垂直位置BX按键状态(位0、1、2分别表示按下左、右和中键,其它位保留)(5)设置鼠标指针位置(功能04H)入口参数:CX水平位置DX垂直位置出口参数:无5

48、.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(6)获取单击按键信息入口参数:(AX)=05,(BX)=按键编号:0=左键,1=右键,2=中键。出口参数:(AX)=按键的状态,根据其二进制位的位置确定:位0左键(0=未按,1=按下)位1右键(0=未按,1=按下)位2中键(0=未按,1=按下)(BX)=单击按键次数(CX)=最后一次的单击的水平(x)坐标(像素值)(DX)=最后一次的单击的垂直(x)坐标(像素值)5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用(7)获取鼠标按钮释放信息(功能06H)入口参数:BX指定的按

49、键(0、1、2分别表示左键、右键和中键)出口参数:AX按键状态(位0、1、2分别表示按下左、右和中键,其它位保留)BX释放的次数CX最后释放时的水平位置(8)安装鼠标事件的中断处理程序入口参数:(AX)=0CH,(CX)=事件屏蔽码,(ES:DX)=中断处理程序地址,事件屏蔽码的各位设置要求如下:0=移动的鼠标指针4=释放右键1=单击左键5=单击中键2=释放左键6=释放中键3=单击右键715=保留,定义为05.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用被定义的中断处理程序为一个FAR过程。鼠标驱动程序使用一个远程调用进入中断处理程序,并设置如下寄存器:(

50、AX)=定义的事件屏蔽码,只有在条件发生时才设置的那些位。(BX)=按键状态:位0代表左键按下,位1代表右键按下,位2代表中键按下。(CX)=水平坐标(x)。(DX)=垂直坐标(y)。(SI)=最后的垂直michey数。(DI)=最后的水平michey数。(DS)=鼠标驱动程序的数据段。5.5 5.5 DOS DOS与与与与BIOSBIOS功能调用功能调用功能调用功能调用【例5-6】在屏幕的右上角动态显示文本鼠标的位置,即:鼠标的任何移动都将马上显示其所处位置,按鼠标左键结束程序的运行。程序如下:.modelsmall,c.dataoldaddrdd?msglabelbytexmsgdbx=;

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922