汇编语言讲义第八章_第1页
汇编语言讲义第八章_第2页
汇编语言讲义第八章_第3页
汇编语言讲义第八章_第4页
汇编语言讲义第八章_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序设计教学重点本章将以一些常用的I/O设备为例,着重讨论I/O程序设计,特别是中断程序设计的方法。外设与CPU数据传送方式中断传送方式第八章输入输出程序设计8.1I/O设备的数据传送方式8.2程序直接控制I/O方式8.3中断传送方式后一页前一页目录退出8.1I/O设备的数据传送方式8.1.1CPU与外设8.1.2直接存储器存取〔DMA〕方式后一页前一页目录退出8.1.1CPU与外设与CPU进行数据交换的,除了存储器外,还有输入输出设备〔统称为外设〕。输入IN和输出OUT指令,可以从外设读取数据和向外设提供数据。由于外设种类繁多,其工作原理、数据格式、操作时序等各异,所以在处理器与外设之间还有一个协调两者数据传送的逻辑电路,称为输入输出〔I/O〕接口电路。处理器并不直接操纵外设,而是通过I/O接口来控制外设。后一页前一页目录退出I/O接口电路示意图处理器数据寄存器状态寄存器控制寄存器输入输出设备数据总线控制总线地址总线外设数据状态信号控制信号I/O接口电路后一页前一页目录退出I/O接口电路中的存放器I/O接口电路呈现给程序员的,是各种可编程存放器。这些存放器可以分成三类:数据存放器——它保存和处理与外设间交换的数据;控制存放器——处理器通过它对外设进行控制,也称命令存放器;状态存放器——外设的当前工作状态通过它向处理器提供。在涉及外设操作的输入输出程序中,各种存放器以I/O地址〔端口〕表达;对应三类存放器分别称为:数据端口、控制端口、状态端口。后一页前一页目录退出CPU与外设数据传送方式程序直接控制I/O方式程序查询I/O方式中断传送方式直接存储器存取〔DMA〕方式后一页前一页目录退出8.1.2直接存取器存取〔DMA〕方式主要由硬件DMA控制器实现其传送功能。DMA〔directmemoryaccess〕方式,也称为成组数据传送方式。主要用于一些高速的I/O设备。如磁带、磁盘、A/D等设备。传送数据时,每个字节一到达端口,就直接从接口送到存储器;同样,接口和它的DMA控制器也能直接从存储器取出字节并把它送到I/O设备去。后一页前一页目录退出DMA工作原理DMA控制器〔intel8237A〕一般包括四个存放器:控制存放器状态存放器地址存放器字节计数器在信息传送前,应初始化这些存放器。地址存放器←要传送的数据块首地址;字节存放器←要传送的数据长度〔字节数〕;状态存放器←控制字,指出数据是输入还是输出,并启动DMA操作。每个字节传送后,地址存放器加1,字节计数器减1。后一页前一页目录退出DMA传送步骤由系统完成以下步骤:⑴DMA控制器向CPU发出HOLD信号,请求使用总线。⑵CPU发出响应信号HOLD给DMA控制器,并将总线让出,这时CPU放弃了对总线的控制,而DMA控制器获得了总线控制权。⑶传输数据的存储器地址〔在地址存放器中〕通过总线发出。⑷传输的字节数通过数据总线进行传送。⑸地址存放器加1,以指向下一个要传送的字节。⑹字节计数器减1。⑺如字节计数器非0,转向第3步。⑻否那么,DMA控制器撤销总线请求信号HOLD,传送结束。后一页前一页目录退出8.2程序直接控制I/O方式8.2.1I/O端口8.2.2I/O指令8.2.3I/O程序举例后一页前一页目录退出8.2.1I/O端口CPU和内存通过I/O端口与外设进行通信。80x86中,I/O端口独立编址,允许设置64K〔65535〕个8位端口,或32K〔32768〕个16位端口。表8.1列出了局部端口地址〔十六进制〕。后一页前一页目录退出8.2.2I/O指令IN/OUT指令,即可传送字节又可传送字,使用的存放器必须是AL或AX。直接寻址:寻址0~255号端口。间接寻址:所有端口,使用DX存放器。IN AX,28HMOV DATA_WORD,AXIN AL,27HTEST AL,00000100HJNZ ERRORMOV DX,126HIN AL,DX ;端口126H OR AL,80H ;第7位控制成组数据传送OUT DX,AL后一页前一页目录退出8.2.3I/O程序举例例8.1发声子程序SOUND例8.2 查询方式

打印字符程序PRT_CHAR例8.3 查询方式 控制数据输入后一页前一页目录退出8.3中断传送方式8.3.18086的中断分类8.3.2中断向量表8.3.3中断过程8.3.4中断优先级和中断嵌套8.3.5中断处理过程后一页前一页目录退出中断的相关概念中断是CPU和外设进行数据传送的有效方法。它可以防止因反复查询外设状态而浪费的时间,从而提高CPU的效率。中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。中断源——引起中断的事件。外部中断〔硬件中断〕——由外设控制器或协处理器引起的中断。内部中断〔软件中断〕——由程序中安排的中断指令INT产生的中断,或由CPU的某些错误结果产生的中断。8080/8088的中断源如图8.3所示。后一页前一页目录退出8.3.18086的中断分类软件中断硬件中断后一页前一页目录退出1.软件中断软件中断又称内中断。它通常由三种情况引起:由中断指令INT引起;由于CPU的某些错误引起;为调试程序〔DEBUG〕设置的中断。后一页前一页目录退出〔1〕中断指令INT引起的内中断CPU执行完一条INTn指令后,会立即产生中断,并调用系统中相应的中断处理程序来完成中断功能,n指出中断类型号。INT指令可以指定0~0FFH中的任何类型号。除系统占用的类型号之外,用户还可利用为用户保存的类型号扩充新的中断处理功能。INTn、INTO、除法错中断都不能被禁止,而且比任何外部中断的优先级都高。后一页前一页目录退出〔2〕处理CPU某些错误的中断除法错中断:INT0在执行除法时,如果除数为0或商超过了存放器所能表达的范围,那么产生一个类型为0的中断。溢出中断:INTO 中断类型号为4假设溢出标志OF=1,那么产生溢出中断;否那么,不产生中断,CPU继续运行原程序。该中断的处理程序,主要是打印出一个错误信息,在处理结束后,不返回原程序继续执行,而是把控制权交给操作系统。如: ADD AX,VALUE INTO ;测试加法溢出后一页前一页目录退出〔3〕为调试程序〔DEBUG〕设置的中断单步中断:为寻找程序中的问题,进行单步工作〔一次只执行一条指令〕。类型号为1。当单步标志位TF=1时,每条指令执行后,CPU会自动产生单步中断。使用单步中断可以逐条指令地跟踪程序的流程,观察CPU每执行一条指令后,各个存放器及有关存储单元的变化,从而指出和确定产生错误的原因。断点中断:将程序分段,为每段设置一个断点。中断类型号为3。当CPU执行到断点时便产生中断,可以检查各存放器及有关存储单元的内容。断点可以设置在程序的任何的地方。后一页前一页目录退出2.硬件中断硬件中断又称外中断。硬件中断主要有两种来源:非屏蔽中断〔NMI〕——为电源错、内存或I/O总线的奇偶等异常事件的中断保存的。中断类型号为2。可屏蔽中断——来自各种外设的中断。由外设的请求引起的中断。可屏蔽中断受中断标志IF控制;非屏蔽中断和IF位无关。后一页前一页目录退出可屏蔽中断从外设发出中断请求到CPU响应中断,有两个控制条件起决定性作用:该外设的中断请求是否屏蔽——由中断屏蔽存放器〔IMR〕控制。CPU是否允许响应中断——由标志存放器〔FLAGS〕中的中断允许位IF控制。后一页前一页目录退出中断屏蔽存放器中断屏蔽存放器的端口地址是21H,如图8.4所示。中断屏蔽存放器可分别控制某个可屏蔽中断源。在编写中断程序时,应在主程序的初始化局部设置好中断屏蔽存放器,以确定允许用中断方式工作的外部设备。;只允许键盘中断MOV AL,11111101BOUT 21H,AL;系统重设键盘中断IN AL,21HMOV AL,11111101BOUT 21H,AL后一页前一页目录退出控制CPU的中断允许标志IFCPU是否响应中断还与中断允许标志IF有关。IF=0,CPU禁止响应任何外设的中断〔关中断〕;IF=1,允许CPU响应外设的中断请求〔开中断〕。中断允许标志IF是控制所有可屏蔽中断的。当任何类型的中断发生时,当前的FLAGS要入栈保存,然后去除IF位,进入中断处理程序,如果允许在一个中断处理程序的执行过程中发生硬中断,那么必须用一条STI指令开中断。当中断返回时,恢复了原FLAGS的值,其中IF=1,那么允许硬中断再次发生。STI 设置中断允许位〔IF=1〕CLI 去除中断允许位〔IF=0〕后一页前一页目录退出中断命令存放器在一次中断处理结束之前,还应给8259A的可编程中断控制器的中断命令存放器发出中断结束命令〔EOI:endofinterrupt〕,否那么以后将屏蔽掉对同级中断或低级中断的处理。中断命令存放器的I/O端口地址为20H〔如图8.4所示〕。在中断处理过程中,也可利用EOI命令去除当前中断请求,以响应同级或低级中断。;结束硬件中断MOV AL,20HOUT 20H,AL后一页前一页目录退出8.3.2中断向量表每个中断都有一个中断类型号。80x86可处理256种类型的中断,类型号为0~0FFH。中断向量表就是各类型中断处理程序的入口地址表。存储器的最低1.5KB,从0000~5FFH为系统占用,其中,最低的1KB,从0000~003FFH存放中断向量表。256个中断向量,每个中断向量占4个字节。每类中断向量的地址=中断类型号×4。图8.5给出了中断向量表。表8.2给出了中断向量表地址分配。图8.6展示了中断操作步骤。后一页前一页目录退出中断操作步骤中断操作步骤:取中断类型号;计算中断向量地址;取中断向量,偏移地址送IP,段地址送DS;转入中断处理程序;中断返回到INT指令的下一条指令。后一页前一页目录退出为中断类型N设置中断向量 MOV AX,0 MOV ES,AX MOV BX,N*4 MOV AX,OFFSETINTHAND MOV ES:WORDPTR[BX],AX MOV AX,SEGINTHAND MOV ES:WORDPTR[BX+2],AX … INTHAND: … IRET用户可以利用保存的中断类型号扩充自己需要的中断功能,对新增加的中断功能要在中断类型表中建立相应的中断向量。后一页前一页目录退出使用DOS功能调用〔21H〕存取中断向量例8.4 使用DOS功能调用存取中断向量后一页前一页目录退出8.3.3中断过程当中断发生时,由中断机构自动完成以下操作:取中断类型号N;标志存放器〔FLAGS〕内容入栈;当前代码段存放器〔CS〕内容入栈;当前指令指针存放器〔IP〕内容入栈;禁止硬件中断和单步中断〔IF=0,TF=0〕;从中断向量表中取4×N的字内容送IP,取4×N+2的字内容送CS;转中断处理程序。如图8.7的中断过程示意图。后一页前一页目录退出8.3.4中断优先级和中断嵌套8086规定的中断优先级次序为: 优先级高 软件中断〔除法错,INTO,INT〕 非屏蔽中断〔NMI〕 可屏蔽中断〔INTR〕低 单步中断可屏蔽中断的优先权分为八级,正常情况下,优先级次序是:IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7定时器 打印机 优先级高 低后一页前一页目录退出8259A的中断命令存放器控制优先级8259A的中断命令存放器的第6、7位控制各种中断请求的优先级次序。R SL 0 0 正常优先级方式 0 1 去除由L2~L0指定的中断请求 1 0 各中断优先级依次左循环一个位置 1 1 各中断优先级依次循环到由L2~L0指定的中断 请求到达最低优先级位置上 ;使IR4成为最低级的中断请求MOV AL,11100100OUT 20H,AL ;IR5,IR6,IR7,IR0,IR1,IR2,IR3,IR4;使优先级次序再左循环一个位置MOV AL,10100000OUT 20H,AL ;IR6,IR7,IR0,IR1,IR2,IR3,IR4,IR5后一页前一页目录退出中断嵌套中断嵌套:正在运行的中断处理程序,又被其他中断源中断的情况。80x86没有规定中断嵌套的深度〔中断程序又被中断的层次〕,实际受堆栈容量的限制。一个中断处理程序,在开中断的情况下,可以被优先级高于它的中断源中断。只有发出了EOI命令,去除正在执行的中断请求,才可以响应同级或低级的中断。如图8.8所示:正常优先级方式下,优先级中断和中断嵌套发生时的处理过程。后一页前一页目录退出8.3.5中断处理程序主程序为响应中断所做的准备工作以及硬件〔包括CPU和外设接口〕自动完成以下动作:后一页前一页目录退出中断响应的特殊情况注意:设备发到CPU的中断请求信号在时间上是随机的,只要未被屏蔽的设备本身的状态是准备好或空闲的,它就会向CPU请求中断,如果此时CPU正在执行一条指令,那么要等到这条指令执行完后,才响应中断。加封锁的指令〔如LOCKMOVAX,BX〕应看作一条指令;对加重复前缀的指令〔如REPMOVSB〕要作为一个整体来处理,执行一次重复串指令即可响应中断;对MOV、POP指令,如果处理对象是段存放器,那么执行完本条指令后,接着再执行一条指令才响应中断。对STI和IRET指令,也要在该指令执行完后,再执行一条指令才响应中断。后一页前一页目录退出中断处理子程序中断处理子程序的编写步骤:保存存放器内容;如允许嵌套,那么开中断〔STI〕;处理中断;关中断〔CLI〕;送中断结束命令〔EOI〕给中断命令存放器;恢复存放器内容;返回被中断的程序〔IRET〕。注意:CPU产生一次中断,I/O设备只完成一个字节〔或字〕的输入输出,所以中断处理程序所用的指针变量或数据变量一般应设置存储单元来保存。后一页前一页目录退出中断程序设计举例例8.5 响铃 P300-303例8.6 键盘输入、打印机输出 P303-310例8.7 P310-313除数为0的中断处理程序 后一页前一页目录退出表8.1I/O端口地址分配这是一个最根本的控制扬声器发出声音的子程序。通过I/O指令使设备控制存放器〔I/O端口地址为61H〕的第一位交替为0和1,而端口61H的第1位和扬声器的脉冲门相连〔见图8.1〕,当第1位由0变为1,延迟一会又由1变为0时,脉冲门就先翻开后关闭,产生了一个脉冲电流。这个脉冲电流被放大后送到扬声器使之发出了声音。61H端口的第0位和一个振荡器〔2号定时器〕相连,现在不用振荡器产生声音,所以把第0位置零。例8.1发声程序-1/4设备控制器例8.1发声程序-2/4通常一个外设的数据端口是8位的,而状态与控制信息只需一位或两位,所以不同外设的状态和控制位可共用一个端口。61H端口的0、1位是控制扬声器的,2~7位分别控制其他外部设备。;入口参数:声音频率BX=6000,发声延迟CX=1000。 SOUND PROC NEAR PUSH AX PUSH DX

MOV DX,CX IN AL,61H

AND AL,11111100B

TRIG:

XOR AL,2

OUT 61H,AL MOV CX,BX ;控制脉冲门开关

DELAY: ;的时间

例8.1发声程序-3/4这个时间值根据PC机的主频是可以改变的,主频越快的机器,这个时间值就应该越大。

LOOP DELAY DEC DX JNE TRIG

POP DX POP AX RET SOUND ENDP例8.1发声程序-4/4采用查询方式的打印字符程序。程序通过反复读取并测试打印机的状态来控制输出。数据存放器的端口地址为378H,状态存放器的端口地址为379H,控制存放器的端口地址为37AH。它们各位的含义如图8.2所示。例8.2打印字符程序-1/4图8.2打印机的状态存放器和控制存放器例8.2打印字符程序-2/4

.modelsmall .stack .data mess db ‘Printerisnormal’,0dh,0ah count equ $-mess .code .startup

mov si,offsetmess

mov cx,count

next:

mov dx,379h

wait:

in al,dx

test al,80h例8.2打印字符程序-3/4测试状态寄存器的第7位,如果为0,表示打印机忙,这时CPU不能送出打印数据;所以程序再次循环,直到第7位变为1,表示打印机空闲,程序才从数据区读取一个字符送到打印机的数据寄存器。并由控制器发出一个选通信号(端口37AH的第0位),控制打印机将这个字符打印输出。

je wait

mov al,[si]

mov dx,378h out dx,al

mov dx,37ah mov al,0dh out dx,al

inc si

loop next

.exit 0 end例8.2打印字符程序-4/4这种CPU与外设交换信息的方式称为查询方式或等待方式。造成CPU必须查询等待的主要原因是许多外设工作速度比较低。查询方式的优点:可以用程序安排几个输入输出设备的先后优先次序,最先查询的设备,其工作的优先级也最高。查询方式的缺点:浪费了CPU的时间,而且由查询转向相应的处理程序的时间较长,尤其是在设备比较多的情况下。为了提高CPU的工作效率,可以采用中断方式传送数据。程序查询I/O方式CPU要从3个设备轮流输入数据,PROC1、PROC2、PROC3分别是设备1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论