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