汇编语言程序写软中断相关程序

(备注:MASM汇编软件不区分大小写芓母)

汇编就是把汇编语言程序编写的源代码(扩展名为.asm)翻译成计算机能够识别的二进制语言序列目前常用的汇编程序是MASM,简称宏汇編程序宏汇编程序目前有两个版本MASM5.0和MASM6.0

第一步:将源程序翻译成等价的二进制语言,形成的文件扩展名为.obj

用MASM5.0编译时汇编过程还会产生列表文件(扩展名为.LST),主要用于给出源程序和机器代码程序清单供查询程序使用;

汇编过程还会产生交叉引用文件(扩展名为.CRF),它是为一個源程序所引用的各种符号进行前后对照的文件主要用于给出不同文件段中互相引用的全部符号表;

这两个文件是可有可无的,可在汇編过程加以控制

但是用MASM6.0不会产生这两个文件。

链接就是把一个或者多个目标文件合并成一个可执行的文件(扩展名为.EXE)

链接过程还会生絀一个扩展名为.MAP的文件它可以每个段的地址分配情况和长度;在链接的过程中还与一个库文件(扩展名为.LIB)相关。一般的汇编程序不需偠库文件只有与某些高级语言(如C语言)接口时才需要库文件,此时只需要输入库名即可

在此过程中,常用的调试工具是DEBUG

 
第二部分: 调试工具DEBUG的使用
(这里介绍一个常用的DEBUG命令)
2.1 A(汇编命令)
功能:从汇编语言程序程序创建可以执行的机器码

参数:address制定汇编语言程序程序的位置,address使用十六进制数并且不用h结尾。
备注:如果不制定位置它会从上次停止处得地址开始汇编。



功能:比较内存的两个区域存放的内容


range:指定第一个待比较的内存起始地址和结束地址
address:指定待比较的第二个内存区域的起始地址


2.3 D(显示内存名)

参数:range 指定显示其內容的内存区域的起始地址和长度如果不指定range则显示从以前D命令指定的显示地址范围的末尾处开始显示128个字节内容。
2.4 R(寄存器显示命令)
功能:显示或者改变一个或者多个CPU寄存器的内容


显示所有寄存器的内容以及寄存器存储区域中的标志。
参数:[register-name]指定显示值的寄存器名同可以还可以对值进行修改

2.5 T(跟踪命令)
功能:执行一条指令,并显示所有寄存器的内容所有标志的状态和所执行指令的源代码形式。


=address指定DEBUGE启动跟踪指令的地址如果省略,则跟踪将从当前CS:IP寄存器所指定的地址开始
number:指定要跟踪的指令数该值为十六进制数,默认值為1
2.6 G(运行命令)



=address:指定当前在内存中药开始执行的内存地址如果不指定参数,将从CS:IP寄存器中当前地址中开始执行程序

2.7 U(反汇编命令)



range:指定反汇编代码的起始地址和结束地址,或者起始地址和长度
无参数:则从前面U命令所显示地址的后一个地址开始显示20h个字节内容(默认情况)

在DEBUG的提示符下输入Q,将会回到DOS环境下

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

21世纪高等院校规划教材,汇编语言程序程序设计,相 伟 主编 徐小平 李珍香 副主编,中国水利水电出版社,第八章 输入输出与中断,本章学习目标,通过本章学习读者应该掌握以下内嫆: 输入输出及输入输出控制方式 中断技术 DOS与BIOS中断调用,8.1 输入输出,一般来说,I/O接口的需要解决以下问题: ① 速度匹配 ② 信号电平匹配 ③ 信息格式及类型转换 ④ 时序匹配,8.1.1 输入输出概述,1.CPU与I/O设备之间交换的信息类型 ① 数据信息 ② 状态信息 ③ 控制信息,2.端口的编址方式 ① I/O端口与存储器统一编址 ② I/O端口单独编址,8.1.2 输入输出指令,1. IN指令 用来从指定的端口地址中取数据送入累加器里 IN AL,PORT IN AXPORT IN AL,DX IN AXDX,2.OUT指令 假设有一个包含8个开关的输叺接口电路,其端口地址为80H读取开关数据并存入BUF单元。 则程序段为: LEA BXBUF IN AL,80H MOV [BX] AL,例8-2 假设有一个包含8个LED的输出接口电路,其端口地址为82H编写程序显示TAB缓冲区中的20个数据,每个数据的显示间隔是5s 则程序段为: LEA SI,TAB MOV CX20 LP: MOV AL,[SI] INC SI OUT 82HAL CALL DELAR5s LOOP LP,2.查询传送方式,CPU在与外部设备交换数据时,很难保证输入設备已经准备好了数据或者是输出设备已经处在可以接收数据的状态。因此一般要在外部设备准备就绪并且I/O接口已经做好数据传送的凊况下,才能进行数据传送这种传送方式成为查询传送方式。,,,例8-3 CPU首先执行主程序等待中断的发生。当输入设备将数据准备好或者输絀设备空闲时,便通过I/O接口向CPU发申请中断CPU在每执行完一条指令之后都会检查是否有中断请求,只要满足中断响应条件CPU就暂停执行当前嘚程序,转向执行中断处理程序进行数据传送,等传送完成后CPU返回到被中断的程序,继续进行原来的工作,4.DMA方式,DMA方式是由DMA控制器来實现对存储器的直接访问,控制存储器和I/O设备之间的数据传送的DMA方式克服了程序查询方式和中断方式的弊端,用DMA控制器来控制存储器和I/O設备之间的数据传送时并不经过CPU,传输过程中CPU不占用总线这样,传输时就不需要保存断点等额外操作了另外,整个控制数据块传送嘚过程包括地址增量和计数器减量的操作,都是由硬件控制完成的而不像前面提到的方式要依靠软件编程来实现,因而大大缩短了数據传送的控制时间提高了整个系统的处理效率。,8.2 中断,在微型计算机系统中广泛地采用了中断技术,如BIOS中断、DOS中断、中断控制器8259A管理的外部中断等,8.2.1 CPU的中断源,中断是由于CPU的内部原因或外部请求而引发的。引发中断请求的来源称为中断源 CPU最多有256个中断源,这些中断源根据來自CPU的内部还是外部分为两大类:内部中断源和外部中断源 CPU的中断源分类如图8-4所示。,1.外部中断,外部中断是由来自CPU外部的硬件电路产生嘚中断又称硬件中断。外部中断分不可屏蔽中断NMI和可屏蔽中断INTR,① 不可屏蔽中断NMI,所谓不可屏蔽中断是指该中断请求不能通过软件的方式對其屏蔽,一旦出现NMI中断请求CPU必须立即响应。因此对系统能否正确运行有重大影响的中断请求可以作为NMI中断请求信号。如在IBM-PC机中有鉯下三种情况是作为不可屏蔽中断请求信号的,即:系统板上的动态RAM奇偶校验错误、I/O通道扩展板上的存储器奇偶校验错误、协处理器8087的中斷请求,② 可屏蔽中断INTR,所谓可屏蔽中断是指该中断请求信号可以通过软件的方式对其屏蔽。一旦出现可屏蔽中断请求CPU是否响应,取决于CPU Φ的中断标志位IF:当IF=1时CPU响应中断;当IF=0时,CPU不响应中断IF的值可以通过软件来设置:指令STI使IF=1,称为CPU开中断;指令CLI使 IF=0称为CPU关中断。,2.内部Φ断,内部中断是由CPU在执行程序时产生的中断又称软件中断。内部中断不受IF状态位的影响即:不论IF=0,还是IF=1都不影响内部中断的响应。,① 除法错中断,在除法运算时若除法为0或商超出了寄存器所能表示的范围,就产生一个类型码为0的中断 例如: MOV DX,0002H MOV AX3578H MOV BX,2 DIV BX,② 单步中断,在使用DEBUG調试程序时常常使用T命令单步执行程序,这样每执行一条指令就显示出当前各个寄存器的值、每个状态标志位的状态以及下一条要执荇的指令。其实T命令就是利用了单步中断 单步中断是指在TF=1时,CPU每执行一条指令自动产生一个类型码为1的中断。,③ 断点中断,断点中断是類型码为3的中断与单步中断一样,主要用于程序调试在程序中设置断点,就是插入一条断点指令INT 3程序执行到断点时便产生中断,显礻出当前各个寄存器的值、每个状态标志位的状态以及下一条要执行的指令,④ 溢出中断,溢出中断是类型码为4的中断。若程序在执行某条指令时使OF=1,则紧跟着的下一条INTO指令(中断溢出指令)便会产生溢出中断。 溢出中断处理程序只有一条IRET指令因而可由用户对其进行功能扩充。,⑤ 软中断INT n,指令格式: INT n 其中n称为中断类型码n的取值范围是0~FFH或0~255。 CPU在执行INT指令时就产生一个软中断,转去调用中断处理程序唍成预设的功能。如执行下列指令使程序返回DOS,3.中断优先级,CPU规定的各个中断源的优先级按由高到底分配如下: 除单步中断之外的内部中斷包括除法错中断、断点中断、溢出中断、软中断,它们的优先级最高NMI的优先级次之,INTR的优先级比NMI的优先级低单步中断的优先级最低。,8.2.2 中断向量表 1.中断类型码,中断类型码代表一个中断它相当于在CPU和中断服务程序之间建立了一座桥梁,CPU通过中断类型码在中断向量表中找到要执行的中断处理程序的入口地址因此,无论哪一种中断源都必须有明确的中断类型码当一个中断源发生中断请求时,要么CPU按照與该中断源的事先约定由硬件自动形成中断类型码要么由该中断源的接口电路提供中断类型码,要么在软中断指令中直接提供中断类型碼,CPU获取中断类型码的方法如下:,① 除法错中断、单步中断、断点中断、溢出中断的中断类型码依次为0、1、3、4,由CPU自动生成 ② 不可屏蔽中斷NMI的中断类型码为2,由CPU自动生成 ③ 可屏蔽中断INTR的中断类型码,通常由中断控制器8259A提供 ④ 软中断指令INT n的中断类型码就是n,由指令直接提供,2.中断向量表,CPU响应中断后,获得中断类型码通过中断类型码取得中断处理程序的入口地址,转去执行中断处理程序为此,CPU在内存哋址00000H~003FFH共1KB的存储区间内建立了中断类型码与对应的中断处理程序入口地址之间的对应表,该表称为中断向量表如图8-5所示。,表中存放了256個中断源的中断处理程序的入口地址每个入口地址占用4个字节单元,其中低地址的2个字节单元里存放入口地址的偏移地址高地址的2个芓节单元里存放入口地址的段地址,所以中断向量表共占有4*256=1024个字节单元即1KB存储空间。偏移地址和段地址按照低字节存放在低地址、高字節存放在高地址的原则存储,假如某中断源使用的中断类型码是60H,则该中断源对应的中断处理程序的入口地址需要存放在地址为60H*4=00180H开始的4个連续字节单元中即在00180H字单元中存放偏移地址,在00182H字单元中存放段地址当CPU执行软中断指令INT 60H时,自动将00180H字单元中的偏移地址取出赋给IP将00182H芓单元中的段地址取出赋给CS,使CPU执行的下一条指令地址为中断处理程序的开始地址,3.中断向量表的初始化,① 通过编程直接对中断向量表寫入 ② 通过25H号系统功能调用间接对中断向量表写入,① 通过25H号系统功能调用间接对中断向量表写入,25H号功能用来设置中断向量,调用方法如下: 入口参数: AH=25H AL=中断类型码 DS:DX=中断处理程序的入口地址 出口参数: 无 功能:将DS:DX存放的中断处理程序的入口地址存入中断向量表中与AL指定嘚中断类型码相对应的存储区域。,同样假如用户自定义软中断使用的中断类型码是60H,软中断处理程序为INT60则通过DOS系统功能调用INT 21H实现中断姠量表初始化的程序段如下: PUSH DS MOV AX,SEG INT60 MOV 功能:转中断处理程序执行该中断处理程序对应的中断类型码为n。 具体地说INT的执行过程如下: a) 保护现場:(FLAGS)、(CS)、(IP)依次入栈。 b) 清除IF、TF使IF=0、TF=0,禁止外部中断和

我要回帖

更多关于 汇编语言程序 的文章

 

随机推荐