子程序及中断实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩:计算机原理实验室实验报告
课程:汇编语言与微机原理
姓名:
专业:网络工程
学号:
日期:2016年12月9日
太原工业学院
计算机工程系
实验五:子程序及中断实验
实验环境PC机+Win 2007+emu8086+proteus仿真器实验日期2016.12.9 一.实验内容
实验目的:
实现子程序和中断服务子程序的设计
编写主程序实现子程序和中断服务子程序的调用
实验内容:
编写子程序设置40H中断为自定义中断服务子程序
编写中断服务子程序实现AX=AX+BX或功能自拟。
编写主程序调用子程序和中断
二.理论分析或算法分析
1.中断向量表
表的地址位于内存的00000H~003FFH,大小为1KB,用于存放256个中断的中断服务程序的入口地址;每个入口占用4 Bytes,低字为段内偏移,高字为段基址。中断向量表如下图所示:
内部中断服务程序
编写内部中断服务程序与编写子程序类似,利用过程定义伪指令PROC/ENDP 结构实现,最后用IRET指令中断返回;主程序利用INT n指令调用中断服务程序,调用前需要设置中断向量。
中断服务程序的装载方法
将已经编写好的中断服务程序的入口地址写入中断向量表中。注意:向量表所在的段地址=0;若中断类型号为n,则新偏移地址写入4×n处,新段地址写入4×n+2处即可,直接写入法或利用系统功能调用都可实现地址写入CPU执行INT N指令的过程
CPU取出INT N指令,经指令译码获知这是一条中断指令。N就是该软件中断的中断向量码。执行中断指令,首先自动将PSW、CS和IP压入堆栈保护起来,并关中断。然后,将中断向量码N乘4得到中断向量表偏移地址(段地址为0000H),从该地址开始的顺序两个单元的内容送IP,下两个单元的内容送CS。即找到服务程序入口地址,进而转向中断服务程序。服务结束后通过IRET返回断点继续执行下面的指令。
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)源代码
mov ax, 1
mov bx, 2
lp1:code segment
assume cs:code, ds:code
st:
mov ax, code
mov ds, ax
xor ax, ax
mov es, ax
mov di, 40H*4
cli
mov ax, es:[di]
mov old, ax
mov ax, es:[di+2]
mov old+2, ax
mov ax, offset newint40
mov es:[di], ax
mov ax, seg newint40
mov es:[di+2], ax
sti
int 40h
jmp lp1
newint40 proc far
add ax, bx
mov num, ax
iret
newint40 endp
old dw ?, ?
num dw 0
code ends
end st
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
五.结论
.通过本次实验,是我对子程序和中断服务子程序的语句结构,中断向量表结构、中断服务程序链的实现过程有了更多的认识,通过部分中断命令有了直观的演示,是我对其有了更深的理解!