中断程序设计
实验目的:
1.掌握中断概念,掌握中断程序设计方法
2.掌握中断程序调试方法
实验步骤:
1.编辑
利用编辑器(记事本,也可采用其它编辑器)建立一个名为ASM3.ASM的文本文件,内容如下:
ASSUME DS:seg1,CS:seg2
seg1 SEGMENT
intoff DW ?
intseg DW ?
seg1 ENDS
seg2 SEGMENT
start: MOV AX,seg1
MOV DS,AX
MOV AX,0
MOV ES,AX
CALL store
CALL init
wait: MOV AH,01H
INT 21H
CMP AL,'Q'
JE key_Q
CMP AL,'I'
JE key_I
JMP wait
key_Q: CALL restore
MOV AH,4CH
INT 21H
key_I: MOV AX,200H
MOV BL,0
DIV BL
JMP wait
store: MOV AX,ES:[00H*4]
MOV intoff,AX
MOV AX,ES:[00H*4+2]
MOV intseg,AX
RET
init: MOV AX,OFFSET newint
MOV ES:[00H*4],AX ; 中断类型0的偏移地址送物理地址00004H
MOV AX,SEG newint
MOV ES:[00H*4+2],AX
RET
restore: MOV AX,intoff
MOV ES:[00H*4],AX
MOV AX,intseg
MOV ES:[00H*4+2],AX
RET
newint: MOV BP,SP
ADD WORDPTR [BP],2
MOV AH,02H
MOV DL,'A'
INT 21H
IRET
seg2 ENDS
END start
2.运行
经过汇编和链接后,运行程序并记录运行过程。
3.调试
利用DEBUG命令载入程序。
利用DEBUG命令单步运行,观察并记录00H中断向量的变化情况。
利用DEBUG命令设置断点在newint行,当中断产生时,观察并记录程序的运行过程。
4.编写60H中断程序
将程序改写为响应60H中断请求,并要求使用DOS功能调用的方式设置中断向量。
重复步骤3的调试。
(1) 思路:将中断类型00H改为60H
例如原来store子程序为:
store: MOV AX,ES:[00H*4]
MOV intoff,AX
MOV AX,ES:[00H*4+2]
MOV intseg,AX
RET
改为:
store: MOV AX,ES:[60H*4]
MOV intoff,AX
MOV AX,ES:[60H*4+2]
MOV intseg,AX
RET
其他2处类似。
(2) 改写key_I:标号后的代码
key_I: int 60h ;显示调用
NOP
JMP wait
预习:
1. 学习中断过程。
2. 按要求编写程序。
实验报告要求:
1. 根据步骤4中的要求,写出源程序。
2. 记录调试的操作及其结果。
3. 回答以下问题:
程序中init部分的作用是什么?
程序中store和restore部分的作用是什么?去掉后对程序运行有何影响?
程序中newint部分什么时候被调用运行?
步骤4中改写的程序中newint部分什么时候被调用运行?如何产生60H中断事件?
这个实验我不太会,没感觉到用的优点,先借鉴过来吧