汇 编 语 言 实 验 报 告
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
运行结果:
____________________________________________________________________________ 五.实验心得疑问建议
通过本次实验的学习,了解了中断程序设计的基本思路和方法,明白了中断程序运行的方式,学会了合理使用保护现场和恢复现场使程序有效运行。
因篇幅问题不能全部显示,请点此查看更多更全内容