子程序及中断实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)

五.结论

.通过本次实验,是我对子程序和中断服务子程序的语句结构,中断向量表结构、中断服务程序链的实现过程有了更多的认识,通过部分中断命令有了直观的演示,是我对其有了更深的理解!

相关文档
最新文档