- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 中断控制器8259
第八章 中断控制技术和8259
第一节 中断控制技术补充
一 中断处理的隐操作及堆栈的使用
⒈ 隐操作
CPU响应中断转去执行中断服务程序之前,其状态标志和程序断点地址进栈,以及中断返回时,断点和标志信息的退栈,是由机器硬件安排自动完成的,无需外界干预,故称为中断处理的隐操作,这些操作都使用堆栈。
堆栈是一种专用的后进先出(LIFO)的存储区,用来保存断点、现场信息及传递子程序所需的参数,广泛用于中断处理、子程序调用及返回处理。堆栈设置在存储器中,由SS堆栈段寄存器和SP堆栈指针来定位。SS指向当前栈的段基址,是栈区的最低地址。SP包含距段基址的偏移地址,也称为堆栈的深度,一个栈最大的深度只能占有64KB空间。SP作为堆栈指针始终指向栈顶(TOS),栈顶在程序执行过程中,随着进栈(PUSH)与退栈(POP)操作而发生变化,有所谓向下生长和向上生长之分堆栈是向下生长型,即在进栈操作时,栈顶向下生长,使堆栈的地址单元号从大到小,递减2,趋向堆栈段基址SS;在退栈操作时,堆栈地址单元号从小到大,递增2,趋向栈底,空栈时,SP指向堆栈段的最高地址,即栈底。栈底也就是SP的初值,栈底一经设定就固定不变。
┆
MOV AX,
MOV SS,AX ;将当前堆栈段基址送入SS
MOV SP, ;将堆栈段偏移地址送入SP ┆
PUSH AX
POP AX
POP BX
中断向量并非常驻内存,而是开机上电时,由程序装入内存指定的中断向量区的。 BIOS程序负责0~1FH共32个中断向量的装入。用户若想使用硬、软中断,则要将中断服务程序口地址装入中断向量指针所指定的中断向量表中。下面举例说明填写中断向量表所用的三种方式:
用MOV指令填写中断向量表。例如,假设中断类型号为60H,中断服务程序的段基址是SEGINTR,偏移地址是OFFSETINTR(006DH)。则填写中断向量表的程序段为:
┆
CLI
CLD
MOV AX,0
MOV E,AX
MOV DI,4*60H ;中断向量指针→DI
MOV AX,OFFSETINTR ;中断服务程序偏移值→AX
STOSW ;AX→[DI][DI+1]中,然后DI+2
MOV AX, SEGINTR ;中断服务程序的段基址→AX
STOSW ;AX→[DI+2][DI+3]
STI
┆
┆
将中断服务程序的入口地址直接写入中断向量表,其程序段为:
┆ ┆
MOV AX,00H
MOV ES,AX
MOV BX,60H*4 ;中断号*4→BX
MOV AX,006DH ;中断服务程序偏移地址
MOV ES:[BX],AX ;装入偏移地址
PUSH CS
POP AX ;中断服务程序段基址
MOV ES:[BX+2],AX ;装入段基址
┆
┆
采用DOS功能调用INT 21H中的AH=25H来装入中断向量,其程序段为:
MOV AL,N ;中断号
MOV AH,25H ;设置中断向量
MOV DX,SEGINTR
MOV DS, DX ;DS指向中断程序段址
MOV DX, OFFETINTR ;DX指向中断程序偏移量
INT 21H
┆
┆
利用过程定义伪指令PROC/ENDP
第1条指令通常为开中断指令STI
最后用中断返回指令IRET
通常采用寄存器传递参数
主程序需要调用中断服务程序
调用前,需要设置中断向量
利用INT n指令调用中断服务程序
编写80H号中断服务程序
功能:显示以“0”结尾字符串的功能
利用显示器功能调用INT 10H
字符串缓冲区首地址为入口参数
DS:DX(段地址:偏移地址)传递参数
code segment
assume
文档评论(0)