您的当前位置:首页正文

汇编语言实验8-中断程序设计

2020-09-14 来源:步旅网


汇 编 语 言 实 验 报 告

Assembly Language Programming Lab Reports

______________________________________________________________________________

班级: _________ 姓名:___________ 学号:___________ 实验日期:_____________

学院: _____计算机与通信工程学院____ 专业:_______计算机科学与技术___________

实验顺序:___实验____ 实验名称:____________中断程序设计________________

实验分数:_______ 考评日期:________ 指导教师:

______________________________________________________________________________

一.实验目的

1.掌握中断的类型,软件中断和硬件中断。

2.掌握中断处理的过程,理解中断类型值,中断向量。

3.掌握系统中断以及功能调用。

4.可以自己设计中断程序

______________________________________________________________________________

二.实验环境

操作系统:windows xp

编译程序:masm 5.0

______________________________________________________________________________

三.实验原理

1.CPU响应中断的条件

(1)当前的指令周期结束

(2)采样到有效的中断请求型号

(3)如果是可屏蔽的中断请求INTR,检查中断允许标志IF是否为1

(4)CPU正在执行的程序是不是中断服务程序,或者是中断优先级较低的中断

服务程序

2.中断响应过程

(1)首先将标志寄存器FLAGS压入堆栈

(2)将TF与IF清零,IF=0即关中断

(3)将正在运行程序的断点CS和IP压入堆栈

(4)从中断向量表中取出中断向量高两个字节的内容送入CS,取出低两个字节的内容送入IP

(5)转到相应中断源的中断服务程序入口,执行中断处理服务程序

______________________________________________________________________________

四.实验步骤及结果分析

1.修改已有中断处理程序。

修改已有的中断int 9h

(1)将原有9号中断的程序入口地址放在一个地方保存起来

(2)编写中断处理程序:int9;调用原有的int9中断

(3)将新int9中断服务程序送入内存0000:0200处;

(4)将int9的入口地址0000:0200存储在中断向量表9号表项中。

源代码:

code segment

assume cs:code

start:

mov ax,0

mov es,ax

mov ax,es:[9+4]

mov es:[0200h],ax

mov ax,es:[9+4+2]

mov es:[0202h],ax

cli

mov ax,offset int9

mov es:[9+4],ax

mov ax,seg int9

sti

mov dx,offset int9end-offset int9start

add dx,16

mov ah,31h

mov al,0

int 21h

mov ah,4ch

int 21h

int9 proc near

int9start:

push ax

push bx

push cx

push es

mov ax,0

mov es,ax

in al,60h

pushf

call dword ptr es:[0200h]

cmp al,3Bh

jne int9iret

mov cx,2000

mov ax,0b800h

mov es,ax

mov bx,1

s:

inc byte ptr es:[bx]

add bx,2

loop s

int9iret:

pop es

pop cx

pop bx

pop ax

iret

int9end:nop

int9 endp

code ends

end start

运行结果:

2.写自己的中断例程

Int 60h用到了dos中断的int 21h功能

(1) 如果触发该中断,在屏幕上显示一串笑脸;

(2) 选择60H号中断类型作为笑脸中断类型;

(3) 编写中断子程序smile_face,显示一串笑脸;

(4) 将该中断子程序的入口地址写入中断向量表中

设置中断向量

将在DS:DX中的中断向量写入中断向量表中。

格式:AH=25H

AL=中断类型号

DS:DX=中断向量

INT 21H

(5) 编写应用程序,触发60H号中断;

(6) 中断结束后,返回应用程序继续执行;

(7)把中断子程序驻留在内存中。

中断驻留是一种特殊的退出程序功能,它在退出前保留程序占用的内存,使这些内存单元不被其它程序覆盖或占用。

格式: AH=31H

AL=0

DX=驻留程序长度+16

INT 21H

AL=0表示返回码。

源代码:

.model small

.stack

.code

mess1 db 0ah,0dh,'enter interrupt!',0ah,0dh,'$'

mess2 db 'exit interrupt!$'

mess3 db 0ah,0dh, 'continue or quit (c/q) ?$'

main proc far

start:

mov ax,@code

mov ds,ax

mov dx,offset smile_face

mov ax,seg smile_face

mov ds,ax

mov al,60h

mov ah,25h

int 21h

conti:

mov dx,offset mess1

mov ah,9

int 21h

int 60h

mov dx,offset mess2

mov ah,9

int 21h

mov dx,offset mess3

mov ah,9

int 21h

mov ah,1

int 21h

cmp al,'c'

je conti

mov al,0

mov ah,31h

mov dx,smiend-smigin+16

int 21h

main endp

smile_face proc far

smigin:

sti

mov cx,10

leng:

mov dl,01h

mov ah,2

int 21h

loop leng

mov dl,0dh

int 21h

mov dl,0ah

int 21h

cli

iret

smiend:nop

smile_face endp

end start

运行结果:

____________________________________________________________________________ 五.实验心得疑问建议

通过本次实验的学习,了解了中断程序设计的基本思路和方法,明白了中断程序运行的方式,学会了合理使用保护现场和恢复现场使程序有效运行。

因篇幅问题不能全部显示,请点此查看更多更全内容