版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 8 章ASM最新汇编语言81第第8章章 输入输出程序设计输入输出程序设计 8.1 I/O设备的数据传送设备的数据传送8.2 程序直接控制程序直接控制I/O 8.3 中断中断传送方式传送方式第 8 章ASM最新汇编语言82 8.1 输入输出的基本概念输入输出的基本概念 从第从第2章的图章的图2.1可以看到,计算机的硬件系统由可以看到,计算机的硬件系统由CPU、内内存存、外设外设三大部分构成,它们相互之间通过一组信息传递的公三大部分构成,它们相互之间通过一组信息传递的公共通道共通道总线总线联系在一起的。联系在一起的。CPU和内存构成了计算机的主和内存构成了计算机的主机部分机部分,是计算机中的高
2、速设备。而大多数外部设备都是慢速,是计算机中的高速设备。而大多数外部设备都是慢速设备,用来把从主机以外采集到的数据送入主机内部,或者把设备,用来把从主机以外采集到的数据送入主机内部,或者把主机内的数据传递到外部,外设中的外部存储器还可以存储大主机内的数据传递到外部,外设中的外部存储器还可以存储大量的数据。那么,量的数据。那么,CPU作为计算机的核心,它又是如何控制作为计算机的核心,它又是如何控制外设的呢?外设的呢? 第 8 章ASM最新汇编语言83 8.1.1 外设接口外设接口接口接口:用于把用于把CPU来的控制命令转换成外设的控制信号来的控制命令转换成外设的控制信号,把外把外设的工作情况转换
3、成设的工作情况转换成CPU可以读取并处理的状态信号可以读取并处理的状态信号。计算机系统中对外设接口也进行了编号,这个号码称作计算机系统中对外设接口也进行了编号,这个号码称作“外外设端口号设端口号”。每一个端口号对应外设接口中的一个存放字节。每一个端口号对应外设接口中的一个存放字节型数据的元件,称为一个型数据的元件,称为一个“外设端口外设端口”。一个外设接口中往往需要多个外设端口一个外设接口中往往需要多个外设端口,占据多个外设端口,占据多个外设端口号。号。CPU控制外设就是通过从这些外设端口中读取数据以及控制外设就是通过从这些外设端口中读取数据以及向它们发送数据实现的。向它们发送数据实现的。CP
4、UI/O设备接口接口第 8 章ASM最新汇编语言84大多数外设接口从功能上可以分为大多数外设接口从功能上可以分为控制部件控制部件、状态部件状态部件和和数据部件数据部件三大组成部分。三大组成部分。控制部件又称为命令部件,专用于接收来自主机的操作控制部件又称为命令部件,专用于接收来自主机的操作命令,并转换成对外设的控制信号;命令,并转换成对外设的控制信号;状态部件负责向主机转达外设的当前工作情况;状态部件负责向主机转达外设的当前工作情况;数据部件是内外数据交换的缓冲器,临时存放需要传递数据部件是内外数据交换的缓冲器,临时存放需要传递的数据。的数据。CPUI/O设备控制控制状态状态数据数据第 8 章
5、ASM最新汇编语言85i/o设备的数据传送方式:设备的数据传送方式:直接存储器存取方式(直接存储器存取方式(DMA)直接控制直接控制i/O方式(方式(in,out指令)指令)中断方法中断方法第 8 章ASM最新汇编语言86 8.2 程序直接控制程序直接控制I/O方式方式 由于由于8086采取了独立编址方式,就需要有特殊的指令控采取了独立编址方式,就需要有特殊的指令控制对外设端口的操作。制对外设端口的操作。(每个外设与一组端口对应)(每个外设与一组端口对应)8086系统设计有两条专用指令:系统设计有两条专用指令:IN和和OUT。 【指令格式指令格式】IN d1, d2 【功能功能】从从d2指明的
6、外设端口中读取指明的外设端口中读取1字节或字节或2字节数据,字节数据,送到操作数送到操作数d1指出的地方。指出的地方。 【说明说明】 (1)8086系统限制系统限制d1只能是只能是AL或或AX。当外设端口号不超。当外设端口号不超过过255时,时,d2操作数可直接写端口号码,操作数可直接写端口号码, 是外设的直接寻址是外设的直接寻址方式;端口号超过方式;端口号超过255时,必须先把端口号放在时,必须先把端口号放在DX中,以中,以DX作为作为d2操作数,这是外设的间接寻址方式。操作数,这是外设的间接寻址方式。第 8 章ASM最新汇编语言87 (2)当)当d1是是AL时,该指令从指定的端口中读时,该
7、指令从指定的端口中读1字节数据;字节数据;当当d1是是AX时,时,CPU将从将从d2对应的端口读对应的端口读1字节数据到字节数据到AL,从,从下一个端口号读下一个端口号读1字节数据到字节数据到AH,即总共读取,即总共读取16位数据送到位数据送到AX 中。中。 【指令格式指令格式】OUT d1, d2 【功能功能】把操作数把操作数d2指明的指明的1字节或字节或2字节数据送到字节数据送到d1对应对应的外设端口中。的外设端口中。 第 8 章ASM最新汇编语言88【说明说明】 (1)d2只能是只能是AL或或AX。当外设端口号不超过。当外设端口号不超过255时,时,d1操作数可直接写端口号码;端口号超过
8、操作数可直接写端口号码;端口号超过255时,必须先把端时,必须先把端口号放在口号放在DX中,以中,以DX作为作为d1操作数。操作数。 (2)当)当d2是是AL时,该指令把时,该指令把AL中的中的8位数据送往位数据送往d1指定的指定的外设端口;当外设端口;当d2是是AX时,该指令把时,该指令把AL中的中的8位数据送到位数据送到d1对对应的端口,把应的端口,把AH中的中的8位数据送往下一端口,即把位数据送往下一端口,即把16位数据位数据送到送到d1对应的端口及下一端口中。对应的端口及下一端口中。 第 8 章ASM最新汇编语言89I/O地址分配表(地址分配表(p284)可编程中断逻辑控制器、串口、并
9、口、键可编程中断逻辑控制器、串口、并口、键盘等硬件分别对应于一个或一组盘等硬件分别对应于一个或一组i/o端口端口第 8 章ASM最新汇编语言810 【例例8.1】说明下面各指令或程序段的功能。说明下面各指令或程序段的功能。(1)MOV DX,61H IN AL,DX(2)MOV BX,61H MOV AL,BX(3)OUT 21H,AL(4)MOV SI,21H MOV SI,AL关于端口地址分配可,参考关于端口地址分配可,参考p284 表表8.1I/O指令是指令是cpu与与外设通信的外设通信的基本基本途径途径第 8 章ASM最新汇编语言811 【解解】 (1)先把立即数)先把立即数61H放到
10、放到DX中,然后以中,然后以DX中的中的61H作作为外设端口号,从相应的外设端口读取为外设端口号,从相应的外设端口读取1字节数据送到字节数据送到AL中。中。 (2)先把立即数)先把立即数61H放到放到BX中,然后以中,然后以BX中的中的61H作作为偏移地址,以缺省段寄存器为偏移地址,以缺省段寄存器DS 中的值为段地址,从相应中的值为段地址,从相应的内存中取出的内存中取出1字节数据送到字节数据送到AL中。中。 (3)把)把AL中的中的1字节数据送往字节数据送往21H号外设端口。号外设端口。 (4)先把立即数)先把立即数21H放到放到SI中,然后以中,然后以SI中的中的21H作为作为偏移地址,以缺
11、省段寄存器偏移地址,以缺省段寄存器DS 中的值为段地址,把中的值为段地址,把AL中中的的1字节数据送到相应的内存中。字节数据送到相应的内存中。 第 8 章ASM最新汇编语言812系统总线系统总线 端口端口 61H: P7 P6 P5P4P3P2 P1 P01.193MHz 定时器定时器 AB 与门与门 放大电路放大电路 扬声器扬声器 图图 扬声器与系统总线的连接扬声器与系统总线的连接i/o程序举例程序举例 计算机系统中的扬声器是一种简单的输出设备,可以随计算机系统中的扬声器是一种简单的输出设备,可以随时从时从CPU接收控制命令。下图是扬声器的连接原理图。接收控制命令。下图是扬声器的连接原理图。
12、 第 8 章ASM最新汇编语言813 【例例8.2】利用无条件数据传送方式,让计算机的扬声器利用无条件数据传送方式,让计算机的扬声器在在1秒钟内保持发出秒钟内保持发出500 Hz 的声音。的声音。 【解解】完整的程序如下:完整的程序如下: delnum = 14000 sta SEGMENT STACK DW 1024 DUP(0) sta ENDS code SEGMENT ASSUME CS:code,SS:sta第 8 章ASM最新汇编语言814 delay PROC NEAR ;时间延迟子程序,以时间延迟子程序,以CX中的值作中的值作为为 PUSH AX ;循环次数,做若干次的乘法产生
13、时循环次数,做若干次的乘法产生时 PUSH DX ;间延迟的效果间延迟的效果 del: IMUL AX ;用乘法指令延迟,执行时间较长用乘法指令延迟,执行时间较长 LOOP del POP DX POP AX RET delay ENDP main: MOV CX,500 sou: PUSH CX第 8 章ASM最新汇编语言815 IN AL,61H ;读出原读出原61H端口的数据端口的数据 AND AL,11111100B ;清最低两位清最低两位 OUT 61H,AL ;送低电位到送低电位到P1 MOV CX,delnum ;取控制延迟时间的循环次数值取控制延迟时间的循环次数值 CALL d
14、elay IN AL,61H OR AL,00000010B ;置置P1位为位为1 OUT 61H,AL MOV CX,delnum 第 8 章ASM最新汇编语言816 CALL delay POP CX LOOP sou MOV AX,4C00H INT 21H code ENDS END main 从这个例子可以看出,对扬声器的控制是不需要任何条件从这个例子可以看出,对扬声器的控制是不需要任何条件的,的,程序中在向程序中在向61H号端口送数据时根本不考虑扬声器是否准号端口送数据时根本不考虑扬声器是否准备好、是否可接收数据等问题备好、是否可接收数据等问题。由端口。由端口61H到放大电路构成了
15、到放大电路构成了扬声器的接口电路,该接口以系统总线上送来的信号驱动薄扬声器的接口电路,该接口以系统总线上送来的信号驱动薄膜的振动,按无条件方式进行数据传送。膜的振动,按无条件方式进行数据传送。 第 8 章ASM最新汇编语言8178.3 查询方式输入输出查询方式输入输出 大多数外设不可能像扬声器那样工作,这些外设处理数大多数外设不可能像扬声器那样工作,这些外设处理数据的速度和提供数据的速度往往比主机内部速度慢得多,因据的速度和提供数据的速度往往比主机内部速度慢得多,因而而CPU与这类设备进行数据传递前必须与这类设备进行数据传递前必须先判断它们是否先判断它们是否“就就绪绪”。CPU以查询方式从外设
16、读取一批数据,以及向外设送以查询方式从外设读取一批数据,以及向外设送出一批数据的流程如图出一批数据的流程如图8.2所示。所示。第 8 章ASM最新汇编语言818Y读状态端口读状态端口 Ready ? 处理完?处理完? NYN向数据端口写一个向数据端口写一个数据或向命令端口数据或向命令端口发一个操作命令发一个操作命令 (b)查询方式输出操作流程)查询方式输出操作流程(a)查询方式输入操作流程)查询方式输入操作流程 读状态端口读状态端口 Ready ? 从数据端口读一个数据从数据端口读一个数据处理完?处理完? NYNY 打印机是一种可以按查询方式工作的输出外设,它与主打印机是一种可以按查询方式工作
17、的输出外设,它与主机连接的接口部件是打印机适配器,也就是平常所说的机连接的接口部件是打印机适配器,也就是平常所说的“标标准并行接口准并行接口”或或“并口并口”。打印机接口中的三大部件齐备,。打印机接口中的三大部件齐备,它们各自占据一个外设端口号码,分别是:它们各自占据一个外设端口号码,分别是: 数据部件数据部件 378H; 状态部件状态部件 379H; 控制部件控制部件 37AH。 状态端口状态端口各位的含义如下:各位的含义如下: BusyACKPESELECTERROR D7 D6 D5 D4 D3 D2 D1 D0 (1)D7位:是打印机的位:是打印机的“忙忙”信号。这一位为信号。这一位为
18、0表示打表示打印机当前正处于印机当前正处于“忙忙”状态,为状态,为1表示打印机不忙。表示打印机不忙。 (2)D6位:是打印机送回的认可信号。当打印机从接口位:是打印机送回的认可信号。当打印机从接口中正确接收中正确接收1字节数据后,就送回一个低电位的认可信号,字节数据后,就送回一个低电位的认可信号,这个信号只维持很短的时间,然后又恢复高电位。这个信号只维持很短的时间,然后又恢复高电位。 (3)D5位:缺纸信号。这一位为位:缺纸信号。这一位为1表示打印机无纸,因表示打印机无纸,因而无法打印,为而无法打印,为0时表示正常工作。时表示正常工作。 (4)D4位:联机信号。这一位为位:联机信号。这一位为1
19、表示正处于联机工作表示正处于联机工作状态,为状态,为0表示没有联机,这时不能工作。表示没有联机,这时不能工作。 (5)D3位:出错信号。为位:出错信号。为0表示打印机内部出现错误,表示打印机内部出现错误,不能工作,为不能工作,为1则正常。则正常。第 8 章ASM最新汇编语言821控制端口控制端口各位的含义如下:各位的含义如下: INTSELECTINITAuto FeedSTB D7 D6D5D4 D3 D2 D1 D0 (1)D4位:允许中断信号。将该位置位:允许中断信号。将该位置1,允许打印机以,允许打印机以中断方式工作,为中断方式工作,为0则不允许。则不允许。 (2)D3位:联机命令。置
20、位:联机命令。置1将设置打印机的联机工作方将设置打印机的联机工作方式,式,控制打印机时总是把这一位置控制打印机时总是把这一位置1,否则打印机不能正常,否则打印机不能正常工作。打印机正常打印时这一位需要保持工作。打印机正常打印时这一位需要保持1。 (3)D2位:初始化信号。正常工作时总是把这一位置位:初始化信号。正常工作时总是把这一位置1,需要把打印机重新初始化时,则在这一位先清需要把打印机重新初始化时,则在这一位先清0再置再置1,并且,并且要维持清要维持清0的时间的时间0.05秒以上。秒以上。初始化又称作打印机复位初始化又称作打印机复位,复位时可观察到的现象是打印头回到最左边。复位时可观察到的
21、现象是打印头回到最左边。 (4)D1位:自动走纸。置位:自动走纸。置1要求打印机在打印完一行后要求打印机在打印完一行后(回车时)自动走纸,清(回车时)自动走纸,清0时则需要向打印机输出换行符时则需要向打印机输出换行符(0AH)控制走纸。这一位通常被置为)控制走纸。这一位通常被置为0。 (5)D0位:选通信号。位:选通信号。CPU通过在这一位上先置通过在这一位上先置1再清再清0,通知打印机从数据部件中取走一字节数据并打印通知打印机从数据部件中取走一字节数据并打印。 把图把图8.2中查询输出的流程稍做修改,可以作为控制打印中查询输出的流程稍做修改,可以作为控制打印机以查询方式工作的程序流程,如图机
22、以查询方式工作的程序流程,如图8.3所示。所示。 计数器清计数器清0 读状态端口读状态端口 Ready ?送数据到数据端口送数据到数据端口送先高后低的送先高后低的STB信号信号 打印完?打印完?计数器加计数器加1,取下一数据,取下一数据NYYN 结束结束图图8.3 查询方式控制打印机查询方式控制打印机 第 8 章ASM最新汇编语言824 【例例8.3】控制打印机以查询方式工作,打印控制打印机以查询方式工作,打印26个英文字个英文字母,共打印母,共打印30行。行。 【解解】 sta SEGMENT STACK DB 1024 DUP(0) sta ENDS data SEGMENT print
23、DB abcdefghijklmnopqrstuvwxyz,0DH,0AH data ENDS code SEGMENT ASSUME CS:code,SS:sta,DS:data第 8 章ASM最新汇编语言825 init PROC NEAR ;打印机初始化程序打印机初始化程序 MOV DX,37AH ;控制寄存器控制寄存器 MOV AL,08H OUT DX,AL MOV CX,1000 init1: LOOP init1 ;延迟,维持初始化信号一段时间延迟,维持初始化信号一段时间 MOV AL,0CH OUT DX,AL ;结束初始化,保持联机结束初始化,保持联机 RET init EN
24、DP第 8 章ASM最新汇编语言826 start: MOV AX,data MOV DS,AX MOV CX,30 ;30行行 again: LEA BX,print ;待打印字符串首地址存放于待打印字符串首地址存放于BX中中 next: MOV DX,379H; 状态寄存器状态寄存器 wait: IN AL,DX TEST AL,80H JZ wait ;打印机忙,转去再读状态端口打印机忙,转去再读状态端口 DEC DX ;378数据端口号数据端口号 MOV AL,BX OUT DX,AL ;送数据到数据端口暂存送数据到数据端口暂存 MOV DX,37AH MOV AL,0DH第 8 章A
25、SM最新汇编语言827 OUT DX,AL ;置置STB信号为信号为1 DEC AL OUT DX,AL ;置置STB信号为信号为0 CMP BX,0AH JZ newline INC BX JMP nextnewline: LOOP again MOV AX,4C00H INT 21Hcode ENDS END start第 8 章ASM最新汇编语言828 8.4.1 中断的基本概念中断的基本概念 1中断中断 CPU暂停正在执行的程序,转去完成另一件工作,完暂停正在执行的程序,转去完成另一件工作,完成后再回到原来的程序继续执行的现象称为中断。成后再回到原来的程序继续执行的现象称为中断。 2中
26、断源中断源 能够导致能够导致CPU中断的事件称为中断的事件称为中断源中断源。8.4 中断方式中断方式第 8 章ASM最新汇编语言82980X86中断源中断逻辑中断逻辑INT NINTO除法错除法错单步单步 中断中断8259A可编程可编程中断中断控制器控制器INTRIR0IR1IR7系统定时器系统定时器键盘键盘非屏蔽中断请求非屏蔽中断请求NMIIMR21h第 8 章ASM最新汇编语言830 3中断源分类中断源分类内中断:内中断:来自来自CPU内部的中断请求。内部的中断请求。(1)中断指令)中断指令(2)错误的中断)错误的中断除法错中断除法错中断溢出中断溢出中断若产生溢出(若产生溢出(OF=1),
27、),INTO中断发生溢出的算术操作。中断发生溢出的算术操作。如:如:ADD AX,BX INTO第 8 章ASM最新汇编语言831 (3)为)为DEBUG设置的中断设置的中断单步中断:每条指今执行后,单步中断:每条指今执行后,CPU产生中断。产生中断。产生的条件:产生的条件:TF(陷井标)(陷井标)=1。断点中断:断点中断:CPU执行到断点处(执行到断点处(INT )产生中)产生中断。断。外中断:外中断:来自来自CPU芯片外的中断请求。芯片外的中断请求。外中断源分为两类:外中断源分为两类:非屏蔽外中断非屏蔽外中断和和可屏蔽外中断可屏蔽外中断。可屏蔽外中断的控制:可屏蔽外中断的控制:中断屏蔽寄存
28、器中断屏蔽寄存器(端口号端口号21H)(P293) 标志寄存器的标志寄存器的IF位(位(1:允许中断):允许中断)第 8 章ASM最新汇编语言832 4中断号中断号 在计算机系统中,各种中断源都被统一地编排了一个互不在计算机系统中,各种中断源都被统一地编排了一个互不相同的号码,用以唯一地标识一个中断源,这个号码称为中相同的号码,用以唯一地标识一个中断源,这个号码称为中断号。断号。 5中断源识别中断源识别 由于中断源有不同的类型,向由于中断源有不同的类型,向CPU申请中断的方式也各申请中断的方式也各不相同。当不相同。当CPU知道有中断请求后,还必须判断出究竟是几知道有中断请求后,还必须判断出究竟
29、是几号中断请求。号中断请求。CPU确定中断号的过程称为中断源识别。如果确定中断号的过程称为中断源识别。如果中断请求来自中断请求来自CPU内部,内部,CPU内有相应机制可以取到内中断内有相应机制可以取到内中断请求的中断号;如果是不可屏蔽外中断请求,系统只安排了请求的中断号;如果是不可屏蔽外中断请求,系统只安排了唯一的中断号(唯一的中断号(2号);当中断请求来自号);当中断请求来自CPU的的INTR外引脚外引脚时,情况就比较复杂了。时,情况就比较复杂了。 第 8 章ASM最新汇编语言833 6中断优先级中断优先级 8088把所有中断源划分为把所有中断源划分为4个等级,以个等级,以0级为最高,依次级
30、为最高,依次降低等级。降低等级。 0级级 除单步中断以外的内中断;除单步中断以外的内中断; 1级级 非屏蔽外中断;非屏蔽外中断; 2级级 可屏蔽外中断;可屏蔽外中断; 3级级 单步中断。单步中断。第 8 章ASM最新汇编语言834 7中断服务程序中断服务程序 CPU响应某个中断时去执行的程序称为响应某个中断时去执行的程序称为“中断服务程序中断服务程序”或或“中断处理程序中断处理程序”。 8中断向量中断向量 把中断服务程序的入口地址的各个字节按照一定的规则把中断服务程序的入口地址的各个字节按照一定的规则排列起来,构成的一个有特定含义的数据组合称为排列起来,构成的一个有特定含义的数据组合称为“中断
31、向中断向量量”或或“中断矢量中断矢量”(中断服务程序的段地址和偏移地址中断服务程序的段地址和偏移地址)。 9中断向量表中断向量表 把所有这些中断向量集中起来,按照中断号由把所有这些中断向量集中起来,按照中断号由0到到255的的顺序,从内存物理地址为顺序,从内存物理地址为0处开始依次存放,构成一张处开始依次存放,构成一张“中中断向量表断向量表”。(中断向量地址中断向量地址?)第 8 章ASM最新汇编语言83500000 0号中断服务程序偏移地址低字节号中断服务程序偏移地址低字节00001 0号中断服务程序偏移地址高字节号中断服务程序偏移地址高字节00002 0号中断服务程序段地址低字节号中断服务
32、程序段地址低字节00003 0号中断服务程序段地址高字节号中断服务程序段地址高字节00004 1号中断服务程序偏移地址低字节号中断服务程序偏移地址低字节00005 1号中断服务程序偏移地址高字节号中断服务程序偏移地址高字节00006 1号中断服务程序段地址低字节号中断服务程序段地址低字节00007 1号中断服务程序段地址高字节号中断服务程序段地址高字节00008 2号中断服务程序偏移地址低字号中断服务程序偏移地址低字003FF 0FFH号中断服务程序段地址高字节号中断服务程序段地址高字节中断向量表中断向量表第 8 章ASM最新汇编语言836中断向量表地址分配01fh bios中断向量中断向量2
33、03fh dos中断向量中断向量405fh 扩充扩充bios中断向量中断向量686Fh 保留保留第 8 章ASM最新汇编语言837 11中断嵌套中断嵌套 在在CPU执行一个低级别的中断服务程序时,如果系统中执行一个低级别的中断服务程序时,如果系统中又产生了一个高级别的中断请求,这时系统会暂停低级中断又产生了一个高级别的中断请求,这时系统会暂停低级中断服务,优先处理高级别中断,处理完后再继续低级中断服务。服务,优先处理高级别中断,处理完后再继续低级中断服务。这种高级别中断打断低级别中断服务的现象称为中断嵌套。这种高级别中断打断低级别中断服务的现象称为中断嵌套。 中断嵌套的典型例子是,中断嵌套的典
34、型例子是,在一个中断服务程序中在一个中断服务程序中,需要,需要在屏幕上显示一些信息,屏幕显示需要用到后面将要说明的在屏幕上显示一些信息,屏幕显示需要用到后面将要说明的10H号中断调用号中断调用,因此在中断服务程序中就会写有,因此在中断服务程序中就会写有INT 10H指令。这是一条内中断调用指令,是最高级别的中断,在执指令。这是一条内中断调用指令,是最高级别的中断,在执行到该指令时,系统会转去先进行行到该指令时,系统会转去先进行10H号中断服务,在屏幕号中断服务,在屏幕上进行显示,上进行显示,10H号中断返回后,再继续原先低级别的中断号中断返回后,再继续原先低级别的中断服务。服务。第 8 章AS
35、M最新汇编语言838 8.4.2 中断处理过程中断处理过程 不论是软中断还是硬中断,当不论是软中断还是硬中断,当CPU响应中断时,自动完成下列操作:响应中断时,自动完成下列操作: (1)取中断号)取中断号n(中断源识别)。(中断源识别)。 (2)把标志寄存器()把标志寄存器(PSW)的内容入栈。)的内容入栈。 (3)当前)当前CS的值入栈。的值入栈。 (4)当前)当前IP的值入栈。的值入栈。 (5)把标志寄存器中的)把标志寄存器中的IF和和TF标志位清标志位清0。 (6)从物理地址)从物理地址4n处取出处取出4个字节的个字节的n号中断的中断向量,设取出号中断的中断向量,设取出的数据依次是的数据
36、依次是b0、b1、b2、b3,把(,把(b1, b0)拼成一个字型数据送到)拼成一个字型数据送到IP中,中,(b3, b2)拼成一个字型数据送到)拼成一个字型数据送到CS中。中。 (7)按)按CS:IP的新值继续执行。的新值继续执行。第 8 章ASM最新汇编语言839 8.4.3 与中断有关的指令与中断有关的指令 【中断指令中断指令】INT n 【功能功能】产生一次产生一次n号中断请求。号中断请求。 【中断返回指令中断返回指令】IRET 【功能功能】从栈中弹出从栈中弹出3个字,第个字,第1个弹出的送到个弹出的送到IP,第,第2个到个到CS,第第3个到个到PSW。 【指令格式指令格式】CLI 【
37、功能功能】把标志寄存器的把标志寄存器的IF标志位清标志位清0,使,使CPU不响应可屏蔽外中不响应可屏蔽外中断。断。 【指令格式指令格式】STI 【功能功能】把标志寄存器的把标志寄存器的IF标志位置标志位置1,允许,允许CPU响应可屏蔽外中响应可屏蔽外中断。断。第 8 章ASM最新汇编语言840 8.4.4 中断与子程序的比较中断与子程序的比较 (1)都需要相应程序段的支持。)都需要相应程序段的支持。 (2)软件中断与子程序都由特定指令调用。)软件中断与子程序都由特定指令调用。 (3)发生调用时,系统自动记载返回地址。)发生调用时,系统自动记载返回地址。 (4)软件中断和子程序都可以带有入口参数
38、和出口参数。)软件中断和子程序都可以带有入口参数和出口参数。 (5)可以用子程序调用代替软件中断的调用指令。)可以用子程序调用代替软件中断的调用指令。第 8 章ASM最新汇编语言841INT指令与指令与FAR类型子程序调用的类型子程序调用的CALL指令之间的主要指令之间的主要差别差别在于在于是否把标志寄存器入栈是否把标志寄存器入栈,因此,只要能够先把标志寄存器,因此,只要能够先把标志寄存器入栈保存,再用入栈保存,再用CALL指令同样可以进行软件中断服务子程序指令同样可以进行软件中断服务子程序的调用。比如,下面的方法完全可以代替的调用。比如,下面的方法完全可以代替INT 21H指令:指令: MO
39、VBX,0MOVDS,BX;中断向量表的段地址中断向量表的段地址MOVBX,84H;21H号中断向量在中断向号中断向量在中断向量表中的偏移地址量表中的偏移地址PUSHFCALLFAR PTR BX;以子程序调用的以子程序调用的CALL指令去调用指令去调用21H号中断服务子程序号中断服务子程序第 8 章ASM最新汇编语言842 软件中断、硬件中断与子程序三者之间也存在着本质的软件中断、硬件中断与子程序三者之间也存在着本质的差别,主要体现在:差别,主要体现在: (1)调用方式不同调用方式不同。软件中断由。软件中断由INT指令调用,子程序用指令调用,子程序用CALL指令调用,而硬件中断是由硬件提出申
40、请,不需要任指令调用,而硬件中断是由硬件提出申请,不需要任何指令。何指令。 (2)系统保护的值不同系统保护的值不同。中断调用时,系统会把标志寄。中断调用时,系统会把标志寄存器、存器、CS和和IP入栈保存,而子程序调用时,系统只入栈保存入栈保存,而子程序调用时,系统只入栈保存IP或者或者CS和和IP。 (3)返回方式不同返回方式不同。中断返回指令是。中断返回指令是IRET,而子程序返,而子程序返回指令是回指令是RET,并且子程序还有,并且子程序还有NEAR和和FAR两种类型。两种类型。第 8 章ASM最新汇编语言843 (4)共享方式不同共享方式不同。硬件中断的服务程序不能被其它。硬件中断的服务
41、程序不能被其它程序共享,而是直接由系统掌握,软件中断的服务程序可程序共享,而是直接由系统掌握,软件中断的服务程序可以被任何程序以以被任何程序以INT指令的形式调用,并且调用者不必关指令的形式调用,并且调用者不必关心中断服务程序到底在内存的哪一个地方,也不需要把中心中断服务程序到底在内存的哪一个地方,也不需要把中断服务程序与调用它的程序拼装到一起。子程序的共享方断服务程序与调用它的程序拼装到一起。子程序的共享方式比较丰富,但有一点,就是被调用的子程序必须与调者式比较丰富,但有一点,就是被调用的子程序必须与调者拼装在一起,形成最终的执行文件。拼装在一起,形成最终的执行文件。 (5)在内存中存在的时
42、间不同在内存中存在的时间不同。中断服务程序通常是。中断服务程序通常是长期保留在内存中,而子程序是随可执行文件一起进入内长期保留在内存中,而子程序是随可执行文件一起进入内存,当可执行文件执行完后,子程序所占用的内存也随之存,当可执行文件执行完后,子程序所占用的内存也随之释放。释放。第 8 章ASM最新汇编语言844 8.4.6 中断服务程序中断服务程序主程序为中断所做的准备主程序为中断所做的准备工作和硬件(包括工作和硬件(包括CPU和和外设接口)自动完成的动作。外设接口)自动完成的动作。(1)设置中断和向量。)设置中断和向量。(2)设置设备的中断屏蔽位。)设置设备的中断屏蔽位。(3)设置)设置C
43、PU的中断允许位的中断允许位IF(开中断)。(开中断)。(4)外设接口送中断请求给)外设接口送中断请求给CPU。(5)当前指令执行完成后,)当前指令执行完成后,CPU送响应信号给外设送响应信号给外设接口。接口。(6)CPU接收中断类型号。接收中断类型号。(7)当前的)当前的PSW,CS和和IP保存入栈。保存入栈。(8)清除)清除IF,TF。(9)中断向量送)中断向量送IP和和CS。第 8 章ASM最新汇编语言845编写编写中断处理子程序中断处理子程序的步骤的步骤:。(1)保存寄存器内容。)保存寄存器内容。(2)如允许中断嵌套,则开中断()如允许中断嵌套,则开中断(STI)。)。(3)处理中断。
44、)处理中断。(4)关中断()关中断(SLI)。)。(5)送中断结束命令()送中断结束命令(EOI)给中断命令寄存)给中断命令寄存器(器(20h端口)。端口)。(6)恢复寄存器内容。)恢复寄存器内容。(7)返回被中断的程序()返回被中断的程序(IRET)。)。第 8 章ASM最新汇编语言846关于关于EOIRSLEOI 00L2L1L020h号端口号端口最低优先级的中断号最低优先级的中断号IR0IR7的的优先级顺序优先级顺序中断中断结束结束命令命令EOI=1,当前正在请求的中断被清除,所以中断处理后,必,当前正在请求的中断被清除,所以中断处理后,必须把须把EOI置置1,否则,同级或低级中断不能被
45、相应。,否则,同级或低级中断不能被相应。EOI=0,表示当前中断请求未被清除,不可处理其它中断。,表示当前中断请求未被清除,不可处理其它中断。发发EOI命令:命令:mov al,20hout 20h,al注:注:EOI并不表示中断处理的结束,并不表示中断处理的结束,iret才表示结束并返回。才表示结束并返回。第 8 章ASM最新汇编语言847关于中断欠套8个可屏蔽的优先级顺序为个可屏蔽的优先级顺序为IR0,IR1IR7,通过通过20h端端口可以改变默认顺序口可以改变默认顺序RSLEOI 00L2L1L020h号端口号端口最低优先级的中断号最低优先级的中断号IR0IR7的的优先级顺序优先级顺序0
46、0 正常正常01 清除由清除由L2L0指定的中断请求指定的中断请求v 各中断优先级依左循环一个位置各中断优先级依左循环一个位置v 各中断优先级依次循环到各中断优先级依次循环到L2L0指定的中断优先级最低指定的中断优先级最低v 例如:送到例如:送到20h端口则,中断优先级顺序为:端口则,中断优先级顺序为:v IR5,IR6,IR7,IR0,IR1,IR2,IR3,IR4v 再送再送 到到20h端口,则中断优先级变为:端口,则中断优先级变为:v IR6,IR7,IR0,IR1,IR2,IR3,IR4, IR5 例:例:p299 图图8.8第 8 章ASM最新汇编语言848 8.4.6.2 修改中断
47、向量的技术修改中断向量的技术 【设置中断向量设置中断向量】 入口参数:入口参数:AH25H AL中断号中断号 DS:DX新的中断服务程序的入口地址新的中断服务程序的入口地址 调用:调用:INT 21H 【取中断向量取中断向量】 入口参数:入口参数:AH=35H AL中断号中断号 出口参数:出口参数:ES:BX=中断向量中断向量 调用:调用:INT 21H第 8 章ASM最新汇编语言849扩充和修改中断向量1、扩充中断向量、扩充中断向量(1)定义中断处理程序;)定义中断处理程序;(2)把中断处理程序的段地址和偏移地址存入)把中断处理程序的段地址和偏移地址存入中断向量表;中断向量表;2、修改中断向
48、量、修改中断向量(1)定义中断处理程序;)定义中断处理程序;(2)保护原中断向量;)保护原中断向量;(3)把中断处理程序的段地址和偏移地址存入)把中断处理程序的段地址和偏移地址存入中断向量表;中断向量表;(4)恢复原中断向量;)恢复原中断向量;第 8 章ASM最新汇编语言8508.4.6.3 中断编程实例中断编程实例 8088系统中有一个定时器,它每隔约系统中有一个定时器,它每隔约0.05秒向秒向CPU发出一次发出一次8号中断请求,这是一个硬中断,不受程序的号中断请求,这是一个硬中断,不受程序的控制。控制。8号中断服务程序中有一条调用号中断服务程序中有一条调用1CH号中断的指号中断的指令,而令
49、,而1CH号中断是一个可供用户使用的中断,它只由号中断是一个可供用户使用的中断,它只由8号中断调用,与硬中断有类似的效果。下面就利用号中断调用,与硬中断有类似的效果。下面就利用1CH号中断,编写一个响铃程序。号中断,编写一个响铃程序。第 8 章ASM最新汇编语言851【例例8.4】编一段中断处理程序,在主程序运行的编一段中断处理程序,在主程序运行的过程中,每隔过程中,每隔10秒钟响铃一次,同时在屏上显示秒钟响铃一次,同时在屏上显示“The bell is ring!”。编程如下:编程如下:DATA SEGMENTCOUNT DW 1MESS DB The bell is ring!,0DH,0AH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA第 8 章ASM最新汇编语言852MAIN PROC FARSTART:PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AL,1CH;取中断向量;取中断向量, MOV AH,35H ;入口参数;入口参数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校社团活动奖惩制度
- 环境保护管理奖惩制度
- 电梯维修人员奖惩制度
- 初中德育班级奖惩制度
- 火锅店奖惩制度实施细则
- 平安建设年终奖惩制度
- 医药公司采购部奖惩制度
- 益性岗位考核奖惩制度
- 相关方内部管理奖惩制度
- 三甲医院单病种奖惩制度
- 近三年内未发生重大事故的安全生产承诺范本
- 岳阳职业技术学院单招职业技能测试参考试题库(含答案)
- 量子密码学与后量子密码学
- 部编版四年级下册语文写字表生字加拼音组词
- 威斯特年产10000吨纳米铜盐系列产品、6000吨叔丁基过氧化氢精馏及3000吨糊状过氧化二苯甲酰项目环境影响报告
- 广西-黄邵华-向量的数量积
- 1.2 国内外网络空间安全发展战略
- 2023年湖南省长沙县初中学生学科核心素养竞赛物理试题(含答案)
- 东北大学最优化方法全部课件
- 人教新课标六年级数学下册全册大单元教学设计(表格式)
- EBSD入门简介姚宗勇课件
评论
0/150
提交评论