现在的位置: 首页 > 综合 > 正文

中断程序设计

2019年05月17日 ⁄ 综合 ⁄ 共 1907字 ⁄ 字号 评论关闭

 中断程序设计

实验目的:

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中断事件?

这个实验我不太会,没感觉到用的优点,先借鉴过来吧

抱歉!评论已关闭.