版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章 输入/输出与中断 输入和输出设备是计算机系统的重要组成部分,程序、原始数据和各种现场采集到的信息,要通过输入装置输入至计算机,计算结果或各种控制信号输出给各种输出装置,以便显示、打印和实现各种控制动作。计算机系统通过硬件接口以及I/O控制程序对外围设备进行控制,使其能协调有效地完成输入输出工作。由于汇编语言能直接控制硬件的特点,就成了编写高性能I/O程度最有效的程序设计语言。本章重点: I/O程序结构及其设计方法本章难点:程序设计技巧(多编程)一、 I/O端口 每种外部设备常有三类信息:控制 CPU 外设 用不同端口 状态 外设 CPU 地址表示 数据 外设 CPU 端口与接口不是一个
2、概念,端口是计算机与外围设备进行通信的部分,是用地址来识别的,一个外设由一个接口与计算机连接,但需要数个端口地址以区分外设的控制命令寄存器、状态寄存器和数据寄存器。CPU用地址来选择外设进行数据的输入和输出。 在80X86微机中,I/O端口与存储器地址完全分开,编址在一个独立的地址空间中,这个I/O空间允许设置64K个8位端口或64K个16位端口,除了专用及保留的单元之外,都可接设备端口。端口地址为0000HFFFFH,其中前256个端口可以直接在指令中指定,端口地址为00HFFH;当端口号大于FFH时,只能先把端口地址放到DX寄存器中。第一节 输入/输出 I/O端口不分段,直接把输入/输出指
3、令中给出的端口地址送地址总线。I/O端口与存储单元采用独立编址,在地址总线上可能出现相同的I/O端口地址和存储单元地址,一个地址码可以是存储器某一单元的地址,也可以是某一输入输出端口的地址,因此,8086CPU用专门的控制线M/IO来区分现在地址总线上的地址是I/O端口地址还是存储单元地址。 在1K个端口地址中,有些已被系统占用,有些被已配置的输入输出的I/O接口占用,一些被保留作开发使用,还有一些是留给用户使用的。表61列出了部分端口地址的配置。二、I/O指令格式:IN AL/AX,PORT/DX 功能:(AL)/(AX)(PORT)/(DX) OUT PORT/DX,AL/AX (AL)/
4、(AX)(PORT)/(DX) 这两条指令用于将外部设备与CPU进行信息传送。外部设备是用端口地址表示操作数:8位立即数(PORT256)或通过DX寄存器间接给出的端口地址(65536个)(接口的地址线)。 CPU由AL(字节)/AX(字)表示传送的信息(数据线)。 例:IN AL,61H 例:MOV DX,378H MOV AL,41H OUT DX,AL三、I/O的传送方式外设与CPU之间进行数据、状态和控制三种信息传送,这些信息以四种方式进行传送。1.无条件传送 当外设的数据传送是定时的,即外设与CPU同步的情况下,CPU不需要查询外设的状态,而直接用IN或OUT指令实现CPU与指定的外
5、设寄存器之间的信息传送。如当输入信息是开关量时,开关已设定,只要用输入指令,肯定会读入开关的状态。无条件传送是最简单的数据传送方式,它所需要的硬件和软件都是最节省的,但这种方式必须在已知并确信外设已处于准备就绪的情况下才能使用,否则就会出错。 2.查询传送 当外设比CPU工作速度低得多的情况下,在输入时,CPU要查询外设是否就绪,若就绪,才能读入数据,否则,继续等待,直到数据准备好了才能进行数据的输入。输出数据之前,CPU要查询外设是否“忙”,若“忙”,则等待,直到其空闲,才能输出一个数据。查询传送方式的流程图如图6-1和图6-2所示。 -1、2两种方式有的教材统称为“直接传送” 3.直接存储
6、器传送(DMA) 直接存储器传送方式适用于高速I/O设备,如磁盘、数模转换器等设备,这些设备传输字节或字的速度非常快,因此用硬件在外设与内存之间直接进行数据交换而不通过CPU。 其传送大致过程是:先用软件把数据在高速外设中存放的起始位置、数据在内存中存放的起始位置、传送数据的个数等参数送到外设相应的寄存器中,然后启动外设,当外设就绪就向CPU发直接传送请求信号,CPU让出总线控制权,高速外设在DMAC的控制下交换数据,数据交换完毕,DMAC交回总线控制权。外设内存CPUDMA控制器 4.中断传送 在查询传送方式中,CPU与外设串行工作,外设在进行I/O操作时,CPU并未进行其它的工作而是处于长
7、时间反复查询的等待状态。为提高CPU的效率,采用中断方式,中断的特点是CPU与外设并行工作,即CPU启动外设之后,不再等待外设工作的完成,而是执行另一个程序。输入时,当外设就绪,主动向CPU发出中断请求,让CPU为其服务,CPU接到请求后,暂时中断现行程序的运行,转去执行处理相应的中断服务程序,完成所需的数据输入,当处理结束后,CPU又返回到被中断程序的断点处继续往下执行原来中断了的程序;在输出时,当外设空闲时,向CPU发出中断请求,CPU暂停当前程序的执行,转去执行相应中断服务程序,完成所需的数据输出,然后再返回去执行原来中断了的程序。这种方式避免了CPU反复查询外设的状态而浪费时间,节省大
8、量的CPU时间,又可以使多台外围设备与CPU并行工作。 四、I/O程序设计举例 通过I/O程序说明使用I/O指令直接在端口级上输入输出的方法。 例61: 假设在计算机第1个并行口上接有一台打印机,设计程序打印如下字符串:Print character program 本程序是采用查询传送方式传送数据。在打印机接口中,数据寄存器的端口地址为378H,状态寄存器的端口地址为379H,控制寄存器的端口地址为37AH,它们各位的功能如图所示: 状态寄存器 7 6 5 4 3 2 1 0 忙位(0=忙) 打印出错(0=出错) 应答(0=可接受) 联机状态(1=联机) 纸出界(1=出界) 控制寄存器 7
9、6 5 4 3 2 1 0 工作方式 选通(1=输出数据) (0=禁止中断方式) 自动换行(1=换行) 0=初始化(1=正常) 选择位(1=接通)实现子程序打印的流程如图所示:YN37AH端口打印机选通生效37AH端口打印机选通信号(AL)379H端口状态字打印机忙?378H端口待打印字符程序清单如下:DATA SEGMENT BUF DBPRINT CHARACTER PROGRAM,0DH,0AHDATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODEBEGIN:MOV AX,DATA MOV DS,AX LEA SI,BUFL1: MOV AL,SI CA
10、LL P1 CMP AL,0AH JZ EXIT INC SI JMP L1EXIT: MOV AH,4CH INT 21H P1 PROC NEAR P1 ENDP PUSH DX CODE ENDS PUSH AX END BEGIN PUSH AX MOV DX,379H W1: IN AL,DX TEST AL,80H JZ W1 POP AX MOV DX,378H ;打印机数据寄存器端口 (DX) OUT DX,AL ;待打印字符 数据寄存器 MOV DX,37AH ;打印机状态寄存器端口 (DX) MOV AL,0DH ;控制字 (AL) OUT DX,AL ;发选通信号 MOV
11、 AL,0CH OUT DX,AL POP AX POP DX RET 测试状态寄存器(379H)第7位,为0即打印机忙,不能打印数据.循环测试直到第7位为1,表明打印机空闲,程序就取一个字符送到打印机的数据寄存器,并由控制寄存器发出一个选通信号(37AH的第0位),控制打印机打印输出。 第二节 中 断 中断:使CPU暂停正在执行的程序而转去处理临时发生的事件,处理完后再返回到被中断程序的断点处继续执行。 中断技术的应用非常广泛,如现代计算机系统中多道程序的分时运行、实时控制、人机通信、计算机故障处理、对I/O设备的管理等均使用中断技术。有了中断功能,就可以使CPU和多个外设同时工作;对于实时
12、控制,现场的各个参数和信息可在任何时间发出中断申请,要求CPU处理,CPU就可马上响应加以处理;计算机在运行过程中,往往会出现事先预料不到的情况,或出现一些故障,如电源突跳、存储出错、运算溢出等等,计算机就可以利用中断系统自行处理,而不必停机。采用中断技术便于充分发挥计算机的所有软、硬件功能,提高计算机的工作效率和实时处理能力。一、 中断源和中断向量表1中断源:引起中断的事件或能发出中断申请的来源。 它们可能是来自外围设备的I/O请求,也可能是计算机的一些异常事故或其他内部原因,还有可能是为调试程序而设置的中断源等。中断源可分为外部中断源和内部中断源。(1)外部中断源:来自CPU的外部,由NM
13、I(不可屏蔽中断源)和INTR(可屏蔽中断源)引起的中断。 NMI由硬件故障引起,不受标志位IF的影响。NMI有电源掉电、存储器出错或总线奇偶检验错等,这些错误及时响应和处理。 INTR由外设请求中断产生,CPU是否响应取决于IF的状态。 STI:IF=1,开中断,CPU能响应外设的中断请求; CLI:IF=0,关中断,CPU不响应外设的中断请求。(2)内部中断源:内部中断源来自CPU的内部,不受IF的限制,有除法错、溢出错、INT n指令和单步中断四种。 优先级由高到低顺序为:除法出错,INTO,INT n,NMI,INTR,单步中断2中断向量表中断向量:各中断服务程序的入口地址(首地址)。
14、 中断向量表:将各入口地址以中断类型号n的顺序建立成一个表,存放在内存的最低1K字节(物理地址为00000H003FFH)中。 每个中断向量占用4个字节:IP,CS。因此,中断向量表可以容纳256个中断向量,对应的中断类型号为0255(或00HFFH)。 0000:0000 * * * * * * * * * *。 IP CS IP CS INT 0 INT 1 -n号中断程序的入口地址在0:4n0:4n+3中,便于调用。 例:INT 16H的入口首地址是?二、中断指令、中断指令INT n ;调号中断IRET ;中断返回中断操作步骤:1)将FLAGS、CS、IP依次入栈,并将IF和TF清零。2
15、)计算中断向量地址4*n。3)(4n) IP,(4n+2) CS,转去执行中断服务程序。)中断返回,将栈顶内容弹出依次送IP、CS及标志寄存器。例:INT 1AH 、新增中断功能(窃取系统中断)根据新增加的中断指令的入口、出口参数及功能编制中断服务程序;)在中断向量表中找一个空闲的中断类型号n;)将新编制的中断服务程序的入口地址送入中断向量表4*n4*n+3 四个字节中。此后,便可以使用“INT n”实现n号中断,执行新增加的中断服务程序。在设置中断向量时,为了避免直接使用中断向量的绝对地址,往往使用DOS功能调用(INT 21H)存取中断向量。)设置中断向量:(AH)=25H(AL)= 中断
16、类型号(DS):(DX)= 中断向量入口地址执行:INT 21H功能:将(DS):(DX)中的中断向量入口地址放置到AL指定的中断类型的中断向量表中。)取中断向量: (AH)= 35H(AL)= 中断类型号执行:INT 21H功能:将AL指定的中断类型的中断服务程序的入口地址从中断向量表中取到(ES):(BX)中。三、中断过程 一个完整的中断过程一般有:中断请求、中断优先级判定、中断响应、中断处理和中断返回五个步骤。第四节 中断服务程序设计 一、 中断服务程序设计基本方法 中断程序设计分为主程序设计和中断服务程序设计两部分。 1主程序设计 如果主程序在运行过程中允许响应中断,则主程序在响应中断
17、前应做好对中断系统的初始化工作,包括CPU、中断控制器8259A和通用外设接口的初始化三部分工作。 CPU:设置堆栈指针(SS和SP),设置中断向量和开放中断。 中断控制器8259A:选择工作方式,修改中断屏蔽寄存器的内容。 (20H口地址) (21H口地址,=0允许中断) 通用外设接口:选择接口的工作方式和设置接口的中断开放位等。初始化工作后,可安排主程序,在中断过程中主程序中要完成三个工作:中断向量的设置;设备中断屏蔽字的设置;开中断。 2中断服务程序设计 中断服务程序的编写方法和标准子程序很类似,在中断服务程序中主要完成七个工作: 1)保存寄存器的内容; 2)如允许中断嵌套,则开中断(S
18、TI); 3)处理过程; 4)关中断(CLI); 5)发中断结束命令(EOI)命令; 6)恢复寄存器的内容; 7)返回被中断的程序IRET。MOV AL,20H OUT 20H,AL 三、 驻留中断服务程序设计举例 如果要将一个程序驻留内存(?),且不允许被其它程序执行时覆盖,用DOS中断INT 21H的31H功能来完成,事先将驻留程序的长度(以节为单位)放入DX中。 程序应以.COM文件格式编写:只有一个段(CS),程序段的段基址放入CS中,程序从100H单元开始(ORG 100H),SP则指向当前段的尾部,数据段也指向CS。 例610 利用INT 1CH中断编写一个驻留程序,完成每隔大约一
19、秒钟在屏幕的右上角显示一个数字的功能,要求数字在09之间变化,每隔大约一秒钟变化一次。 定时器每隔1/18.2秒就产生一次INT的中断,而INT 8中调用了INT 1CH,系统的INT 1CH中只有条中断返回指令,是留给用户编写定时程序的。程序清单如下: CODE SEGMENT ORG 100H ASSUME CS:CODE,DS:CODE START:LEA DX,INTIC ;中断服务程序入口 MOV AX,SEG INTIC MOV DS,AX MOV AX,251CH INT 21H MOV AX,3100H MOV DX,(PROG_LEN+15)/16+16 ;驻留程序的长度 I
20、NT 21H ;驻留退出 INTIC PROC FAR PUSH AX PUSH DS MOV AX,CS MOV DS,AX DEC COUNT JNZ EXIT MOV COUNT,18 PUSH BX PUSH CX PUSH DX PUSH ES MOV AX,0B800H ;直接写屏 MOV ES,AX MOV AL,CHAR MOV ES:158,AL INC CHAR CMP CHAR,9 JBE DISP MOV CHAR,0 DISP: POP ES POP DX POP CX POP BX EXIT: POP DS POP AX IRET INTIC ENDP COUNT
21、DB 18 CHAR DB 0PROG_LEN EQU $-START CODE ENDS END START 第三节 中断调用 在IBMPC机的存储系统中,从地址0FE000H开始的8K ROM中装有基本的输入输出系统BIOS,BIOS的主要功能是驱动系统中所配置的常用外设,如键盘、显示器、打印机、磁盘驱动器及异步通讯接口等,使程序员不必过多地关心这些设备具体的物理特性和逻辑结构细节(如外设寄存器地址、命令及状态格式等),而直接用指令设置相应的调用参数,用一条INT指令就能完成一种很复杂的功能,控制各种输入输出操作,大大提高了用户的编程效率,减少了出错的可能性。利用BIOS功能编写的程序简洁
22、,可读性好,而且易于移植。 BIOS中包含许多模块,每个模块对应一种I/O设备,每个模块的入口地址都在中断向量表中,可通过软件“INT n”调用各个模块,当某个BIOS程序中具有多种不同功能时,用不同的编号加以区分,并且约定在AH中存放不同功能的编号,实现对BIOS子程序的调用。 调用BIOS功能时,有以下几个基本步骤:1)将调用参数装入指定的寄存器中。2)如需功能号,把它装入AH中。3)如需子功能号,把它装入AL中。4)按中断号调用BIOS中断。5)检查返回参数是否正确。一、 键盘中断调用 字符码与扫描码: 键“按下”或“松开”时,若键中断是允许的(21H的D1=0),则产生INT 9的中断
23、:从8255的60H口读7位扫描码,最高位为0,则键按下,为1,键松开。(Esc键按下:01H,松开:81H) 同时将扫描码转换为相应的字符码(ASCII码或0)。 在40H:001AH3EH为键盘缓冲区,分别存放缓冲区的首地址指针、末地址指针、16个键的扫描码和字符码、及结束地址。 1BIOS键盘调用 键盘中断类型号为16H,用指令“INT 16H”调用键盘I/O ROM中断程序,键盘中断调用有3个功能,由AH内容为0、1或2进行选择其功能。(1)(AH)= 0 从键盘读字符 功能:从键盘读字符的ASCII码到AL中,键盘的扫描码放AH中,即:(AL)= 字符的ASCII码,(AH)= 键盘
24、扫描码(2)(AH)= 1 从键盘缓冲区读字符,不等待 功能:从键盘读字符的ASCII码到AL中,键盘的扫描码放AH中,并设置ZF标志,若按过任一键(即键盘缓冲区不空),则置ZF=0,否则,置ZF=1。 即:ZF=0时(AL)= 字符的ASCII码,(AH)= 键盘扫描码(3)(AH)= 2 取键盘状态字功能:在键盘中Shift,Alt,Num Lock,Scroll,Ins和Caps Lock这些键没有ASCII码,可以通过INT 16H的2号功能取键盘的状态字送AL中。键盘状态字如图所示。7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0按下右边的Shift键 按下左边的Shi
25、ft键 按下Ctrl按下Alt Scroll Lock Num Lock Caps Lock Insert其中,高四位指出各种键盘方式是ON(1)还是OFF(0);低四位表示各键是否按下。2DOS键盘功能调用键盘输入一个字符 返回:AH=1 等待、回显、响应+ AL=字符的ASCII码AH=7 等待、不回显、不响应+ AL=字符的ASCII码AH=8 等待、不回显、响应+ AL=字符的ASCII码AH=6 DL=0FFH时,读键盘 AL=字符的ASCII码 不等待、不回显、不响应+ AL=0(未准备好) DL0FFH时, 显示DL中字符键盘输入字符串(10号功能) MOV AH,10 LEA
26、DX,缓冲区首偏移地址 INT 21H 功能:从键盘输入字符串存入DS:DX所指的缓冲区,以回车符结束输入,同时将字符串显示在屏幕上。二、显示器中断调用 单色:以文本方式显示字符占25行*80列*2=4000内存单元 显示器 每个字符两个字节:ASCII码、属性(B800H段开始) 彩色:文本方式或图形方式 640/8*200=16K个内存单元 图形以像素点存放在内存(A000H段开始)-存储器映像 本节介绍显示器的BIOS和DOS功能调用。 单色属性字节: 1=闪烁 背景 1=高亮 前景 01H为加下划线 0=正常 000=黑 0=正常 000=黑 的黑底白字 111=白 111=白D7D0
27、1BIOS显示器调用 显示器中断类型号为10H,INT 10H调用显示器中断程序,由AH选择功能。 (1) 设置显示方式(功能号0) -屏幕清屏 入口参数:(AH)= 0,(AL)=(013) (AL)= 0 :4025黑白文本方式 (AL)= 1 :4025彩色文本方式 (AL)= 2 :8025黑白文本方式 (AL)= 3 :8025彩色文本方式(进DOS下的默认方式,B800H) (AL)= 4 :320200黑白图形方式 (AL)= 5 :320200彩色图形方式 (A000H) (AL)= 6 :640200黑白图形方式 (AL)= 0EH :640200彩色图形方式 出口参数:无
28、例:将屏幕置成8025黑白文本方式: MOV AH,0 MOV AL,2 INT 10H (2) 设置光标的大小(功能号1)-由专门硬件电路来控制平行线条 入口参数:(AH)=1,(CH)=光标开始行(011),(CL)=光标结束行(112) 出口参数:无 存(40H:61H)中,D4=1关闭光标 (40H:60H)中 例:将光标设置为满方块: MOV AH,1 MOV CX,000CH INT 10H 此功能仅在字符显示方式下有效。(3) 设置光标的位置(功能号2) 入口参数:(AH)=2,(BH)=页号(在当前屏幕显示时取0)(40H:62H)中 (DH)=行号(0m-1)(40H:51H
29、,53H,55H,5FH)8页 (DL)=列号(0n-1)(40H:50H,52H,54H,5EH)8页 出口参数:无 例:将光标设置在第10行第20列: MOV AH,2 MOV BH,0 MOV DX,0A14H INT 10H(4) 屏幕上卷(功能号6)-可以在屏幕中开小窗口 入口参数:(AH)= 6,(AL)= 上卷行数 (CX)= 上卷部分左上角的行、列号 (DX)= 上卷部分右下角的行、列号 ;窗口大小 (BH)= 卷入行字符属性 出口参数:无 例:将屏幕设置成8025,(AL)=0,则整个屏幕上卷,即清屏: MOV AH,6 MOV AL,0 MOV BH,7 MOV CX,0
30、MOV DX,184FH INT 10H 功能7和功能6类似,也能使屏幕的内容下卷指定的行,其他参数的设置与功能6一样。(5)写字符和属性(功能号9) 入口参数:(AH)= 9 (AL)= 要写字符的ASCII码 (BH)= 页号 (BL)= 属性值 (CX)= 重复次数 出口参数:无 例:在当前光标位置连续显示出10个浅绿色的“*”字符 MOV AH,9 MOV AL,* MOV BH,0 MOV BL,0AH MOV CX,10 INT 10H(6)写字符(属性不改变)(功能号10) 入口参数:除(AH)= 10外,其余与9与功能相同。 注意:功能号9与功能号10在当前光标位置写字符的操作
31、不移动光标,所以,每次写字符之前,都必须重新置光标位置。彩色字符属性:高四位是背景,低四位是前景0=黑 1=蓝 2=绿 3=青 4=红 5=品红 6=棕 7=灰白8=灰 9=浅蓝 A=浅绿 B=浅青 。E=黄 F=白(7)写字符串(功能号19)入口参数:(AH)= 19,(ES)= 字符串所在段的段地址 (BP)= 字符串首偏移地址,(CX)=字符串长度 (DX)= 显示字符串起始行/列,(BH)=页号,(AL)=(03) (AL)= 0:(BL)= 属性,串:Char,char char 显示完后,光标返回起始位置 (AL)= 1:(BL)= 属性,串:Char,char char 显示完后
32、,光标跟随移动 (AL)= 2:串:Char,attr,char,attr char,attr 显示完后,光标返回起始位置 (AL)= 3:串:Char,attr,char,attr char,attr 显示完后,光标跟随移动(8)读当前显示方式(功能号15)入口参数:(AH)= 15出口参数:(AL)= 当前显示方式(见0号功能)(40H:49H) (BH)= 当前页号,(AH)= 屏幕上字符列数(9)写像素(功能号0CH)-图形方式下入口参数:(AH)= 0CH (DX)= 行号,(CX)= 列号 (AL)= 颜色值,(BH)= 当前页号例64 在屏幕上以红色显示如下图形,并按用户输入的数
33、字滚动星号内部的几行字符。 * * * * * * * * * * * 0 0 0 0 0 0 0 0 * * 2 2 2 2 2 2 2 2 * * 4 4 4 4 4 4 4 4 * * 6 6 6 6 6 6 6 6 * * 8 8 8 8 8 8 8 8 * * * * * * * * * * * 程序见P122,演示2DOS显示功能调用 DOS显示功能有三个:单字符显示、字符串显示,这些功能自动移动光标。(1)单字符显示(2号调用)调用格式:MOV AH,2 MOV DL,待显示字符的ASCII码 INT 21H 功能:将DL中的字符送显示器显示。(2)单字符显示(6号调用)6号调用
34、与2号调用类似,但(DL)=0FFH是键盘输入。(3)字符串显示(9号调用)调用格式:MOV AH,9 LEA DX,字符串首偏移地址 INT 21H 功能:将当前数据区中DS:DX所指向的以$结尾的字符串送显示器显示。注意:使用INT 21H 显示字符串,一定要在显示串之后加上定界符$。 四、鼠标中断调用 鼠标由一个设备驱动程序的软件接口来控制,这个驱动程序一般由CONFIG.SYS或AUTOEXEC.BAT文件的一个项来安装。必须安装这个驱动程序,才可以识别并响应鼠标的动作。鼠标的中断类型号为INT 33H。 下面先介绍鼠标的一些基本概念: 鼠标指针:在文本方式下,指针是一个反相显示的闪烁
35、的方块;在图形方式下,指针是一个箭头。 Mickey:测量鼠标移动的单位,约等于1/200英寸。 Mickey计数:鼠标球横向或纵向滚动的Mickey的数量。鼠标驱动器用Mickey来计算指针在屏幕上移动的像素数。 阈值速度:阈值速度以每秒Mickey为单位,鼠标必须在屏幕上以双倍速度移动指针。默认的阈值速度是每秒64 Mickeys。 程序中的所有鼠标操作都是由标准的INT 33H功能来执行的,但不像其他的INT操作使用AH寄存器存放功能号,INT 33H的功能号被装入整个的AX寄存器。 程序发出的第一个鼠标功能应当是功能00H,它仅仅初始化鼠标驱动器和程序之间的接口。紧接着程序应当执行功能
36、01H,它使鼠标指针出现在屏幕上。随后,可以在鼠标操作的范围内选择其他功能。 1初始化鼠标 入口参数:(AX)=00 出口参数:(AX)=00,则没有安装鼠标支持程序; (AX)=FFFFH,则安装了鼠标支持程序,(BX)=鼠标按键的数量。 如果安装了鼠标支持程序,该初始化鼠标的操作步骤如下: 1)设置鼠标指针到屏幕中央; 2)如果鼠标指针是可见的,则隐蔽鼠标指针; 3)设置鼠标指针的显示页为零; 4)根据屏幕显示方式设置鼠标指针:文本为矩形及反相彩色,图形为箭头; 5)设置Mickey与像素的比率,水平比率=8:8,垂直比率=16:8; 6)设置指针的水平和垂直界限的最小值和最大值: 7)设
37、置倍带阀值为每秒64 Mickeys,该值可以改变。 2显示鼠标指针 入口参数;(AX)=01 这个操作在功能00H后使用,使鼠标指针显示在屏幕上。鼠标驱动器保存一个指针标志以确定是否显示指针。如果标志是0则显示指针,其他值则隐蔽指针。标志初始化为-1,功能01H递增这个标志为0,这样指针就显示。3.隐蔽鼠标指针入口参数;(AX)=02 一般是在程序执行的最后调用这个功能以隐蔽指针。这个功能递减指针标志从0到-1,使指针被隐蔽。4获取按键状态和指针位置入口参数;(AX)=03出口参数:(BX)=按键的状态,根据其二进制位的位置确定如下: 位0 左键(0=未按 1=按下) 位1 右键(0=未按
38、1=按下) 位2 中键(0=未按 1=按下) (CX)=水平(x)坐标 (DX)=垂直(y)坐标 水平和垂直坐标在像素项中表示,即使在文本方式下也这样(显示方式03为每字节8个像素)。这些值通常在指针的最小值和最大值界限之内。5设置指针位置入口参数;(AX)=04,(CX)=水平(x)坐标,(DX)=垂直(y)坐标 这个操作设置鼠标在屏幕上的水平和垂直坐标,如果指针超出了最小和最大的界限,此操作会做出必要的调整,在新位置设置指针。6获取单击按键信息入口参数;(AX)=05,(BX)=按键编号:0=左键,1=右键,2=中键出口参数:(AX)=按键的状态,根据其二进制位的位置确定: 位0 左键(0
39、=未按 1=按下) 位1 右键(0=未按 1=按下) 位2 中键(0=未按 1=按下) (BX)=单击按键次数 (CX)=最后一次单击的水平(x)坐标(像素值) (DX)=最后一次单击的垂直(y)坐标(像素值) 该操作重置单击按键计数器为0。7获取释放键信息入口参数;(AX)=06,(BX)=按键编号:0=左键,1=右键,2=中键出口参数:(AX)=按键的状态,根据其二进制位的位置确定: 位0 左键(0=未按 1=按下) 位1 右键(0=未按 1=按下) 位2 中键(0=未按 1=按下) (BX)=释放键次数 (CX)=最后一次释放键的水平(x)坐标(像素值) (DX)=最后一次释放键的垂直(
40、y)坐标(像素值) 该操作重置释放键计数器为0。8设置指针水平界限入口参数;(AX)=07,(CX)=水平最小界限,(DX)=水平最大界限 这个操作设置指针的最小和最大的水平界限(像素值)。如果最小值大于最大值,该操作随意交换这两个值。如果指针超出了定义的区域,该操作把它移回到区域内。9设置指针垂直界限入口参数;(AX)=08,(CX)=垂直最小界限,(DX)=垂直最大界限 这个操作设置指针的最小和最大的垂直界限(像素值)。如果最小值大于最大值,该操作任意交换这两个值。如果指针超出了定义区域,该操作把它移回到区域内。10读取鼠标移动计数器入口参数;(AX)=0BH出口参数:(CX)=水平计数(
41、正值表示移动到右边,负值表示移动到左边)(DX)=垂直计数(正值表示向下移动,负值表示向上移动) 这个操作返回自最后一次请求这个功能以来的水平和垂直的mickey数(在-32768到+32767范围内)。11安装鼠标事件的中断处理程序入口参数;(AX)=0CH,(CX)=事件屏蔽码,(ES:DX)=中断处理程序地址 事件屏蔽码的各位设置要求如下: 0=移动的鼠标指针 4=释放右键 1=单击左键 5=单击中键 2=释放左键 6=释放中键 3=单击右键 7-15=保留,定义为0 程序可能需要在鼠标发生关联的事件时自动响应。功能0CH的目的是提供一个事件处理程序,借此鼠标软件来中断程序并调用事件处理
42、程序,执行它所请求的功能并在完成任务的时候返回到原程序的执行点(断点)。CX装入一个事件屏蔽码,以指出处理程序响应哪一种事件。 被定义的中断处理程序为一个FAR过程。鼠标驱动程序使用一个远程调用进入中断处理程序,并设置如下寄存器:(AX)=定义的事件屏蔽码,只有在条件发生时才设置的那些位。(BX)=按键状态:位0代表左键按下,位1代表右键按下,位2代表中键按下。(CX)=水平坐标(x)。 (DX)=垂直坐标(y)。(SI)=最后的垂直mickey数。 (DI)=最后的水平mickey数。(DS)=鼠标驱动程序的数据段。 在进入中断处理程序的入口处,把所有的寄存器都入栈保存,并将DS初始化为数据
43、段的地址。退出时,所有寄存器都出栈。在中断处理程序中,只能使用BIOS中断,而不能用DOS中断。五、磁盘文件管理 DOS为汇编语言程序设计提供了一系列的磁盘文件管理的功能,用户不必关心文件的实际存储形式以及磁盘输入/输出的具体操作,而应着重理解DOS系统功能中有关磁盘文件控制的调用方法,即文件代号式磁盘存取,从磁盘上读取某个文件或把一个文件写入磁盘中去。与磁盘文件管理功能调用有关的说明如下: 1文件说明与文件代号 当用户程序需要建立或打开一个文件时,要求入口指针指向一个ASCIZ码字符串,这个ASCIZ串(ASCII-ZERO)包括文件的路径名和一个全0的字节,路径名说明文件所在的驱动器名、目录路径和文件名,如文件说明为: PN DB A:UCDOSFILE1DOC,00 文件一旦建立或打开,DOS在自己的保留区建立一个有关文件名、存放盘及路径、读写位置指针等信息的控制块,返回给用户的是一个16位二进制的控制字,即文件代号,标准设备的文件代号预定义为04,对建立或打开的文件,其代号从6开始顺序排列,用这个文件代号,用户可以方便地访问相应的文件,进行必要的读、写、关闭等操作。2错误返回代号 对于存取磁盘文件,用进位标志CF来表示调用操作是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届安徽省豪州涡阳县市级名校中考物理四模试卷含解析
- 四川省巴中学市巴州区2026届中考适应性考试物理试题含解析
- 福建省漳州市平和县2026年中考物理全真模拟试题含解析
- 公司生产安全风险防控记录表
- 2026年广东省广州市广雅中学中考物理最后冲刺模拟试卷含解析
- 福建省莆田市城厢区2026届中考物理押题试卷含解析
- 护理操作规范与流程培训
- 胸痛患者的急救转运注意事项
- 危重患者管道护理的家属参与
- 整体护理查房:康复护理计划
- 2026年普通高等学校招生全国统一考试(北京高考卷)数学试卷
- 2026年河口区卫生类事业单位公开招聘工作人员(24人)笔试参考题库及答案详解
- 2026年福建厦漳泉城际铁路有限责任公司社会招聘34人笔试备考题库及答案详解
- 北师大版三年级下册数学总复习《数与代数》教学课件(新教材)
- 铸造车间安全生产守则培训课件
- 2025年福建省厦门市广播电视台(融媒体中心)人员招聘考试试题及答案解析
- 2026 年安全生产月(医院版)人人讲安全、个个会应急 - 排查整治风险隐患课件
- 2026年高考全国I卷英语考试试题及答案
- JJG 617-1996数字温度指示调节仪
- 浙江省湖州市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 上海英语高考及时雨翻译(中文+答案)word版
评论
0/150
提交评论