汇 编 语 言 实 验 报 告
Assembly Language Programming Lab Reports
______________________________________________________________________________
班级: ____ 姓名:__ __ 学号:___实验日期:______
学院: ______ _____ 专业:____ ______
实验顺序:_______ 原创:____ ___ 实验名称:_____中断程序设计_______
实验分数:_______ 考评日期:________ 指导教师:
______________________________________________________________________________
1.实验目的
1.掌握中断的类型,软件中断和硬件终端。
2.掌握中断处理的过程,理解中断类型,中断向量。
3.掌握系系统中断以及功能调用。
4.可以自己设计中断程序。
______________________________________________________________________________
2.实验环境
操作系统:windows 8.1
编译程序:masm 5.0
______________________________________________________________________________
3.实验原理
1.CPU响应中断的条件:
(1)当前的指令周期结束;
(2)采样到有效的中断请求信号;
(3)如果是可屏蔽的中断请求汇编语言大小写字母转换INTR,检查中断允许标志IF是否为1,即中断开放;
(4)CPU正在执行的程序不是中断服务程序,或者是中断优先级较低的中断服务程序。
2.中断响应过程:
(1)首先将标志寄存器FLAGS压入堆栈,将陷阱标志TF存入暂存器;
(2)将TF与IF清零,IF=0即关中断;
(3)将正在运行程序的断点CS和IP压入堆栈;
(4)从中断向量表中取出中断向量高两个字节的内容送入CS,取出低两个字节的内容送入IP;
(5)转到相应中断源的中断服务程序入口,执行中断处理服务程序。
3.编写软件中断处理子程序步骤:
(1)保护现场;
(2)STI开中断指令;如允许中断嵌套,则断开中断;
(3)处理中断;
(4)CLI关中断指令;
(5)恢复现场;
(6)IRET指令,返回被中断的程序。
______________________________________________________________________________
4.实验步骤及结果分析
1. 写出定制自己的中断处理程序的设计方法,源代码。调用自己写的中断处理程序。
设计一个笑脸中断INT 60H。
设计思路:
(1)如果触发该中断,在屏幕上显示一串笑脸;
(2)选择60H号中断类型作为笑脸中断类型;
(3)编写中断子程序smile_face,显示一串笑脸;
(4)将该中断子程序的入口地址写入中断向量表中;
(5)编写应用程序,触发60H号中断;
(6)中断结束后,返回应用程序继续执行;
(7)把中断子程序驻留在内存中。
源代码:
.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
调用截图:
2. 对已有中断处理程序进行修改。
原程序:将大写的字符串在屏幕上特定位置用小写字母显示出来。
改为:将小写的字符串在屏幕上特定位置用大写字母显示出来。
设计思路:
(1) 如果触发该中断,将数据段中的字符串中内字母转化为大写显示在屏幕上;
(2) 选择7ch号中断类型作为中断类型;
(3) 编写中断子程序,转化大小写;
(4) 将该中断子程序的入口地址写入中断向量表中,设置中断向0000:0200—0000:02ff这256个字节空间不会被占用,所以将中断向量设置为0000:0200;
(5) 编写应用程序,触发7ch号中断;
(6) 中断结束后,返回应用程序继续执行;
(7)把中断子程序驻留在内存中。
源代码:
assume cs:codesg
datasg segment
db 'conversation',0
datasg ends
codesg segment
start:
mov ax,cs
mov ds,ax
mov si,offset capital_s
mov ax,0000h
mov es,ax
mov di,0200h
mov cx,offset capital_e - offset capital_s
cld
rep movsb
mov word ptr es:[7ch*4],0200h
mov word ptr es:[7ch*4+2],0000h
mov ax,datasg
mov ds,ax
int 7ch
mov ax,4c00h
int 21h
capital_s:
push ax
push ds
push si
push es
push di
mov ax,0b800h
mov es,ax
mov di,12*160+36*2
mov ax,0
mov si,0
mov cx,0
change:
mov al,ds:[si]
mov cl,al
jcxz ok
or al,20h
mov ah,0a0h
mov es:[di],ax
inc si
add di,2
jmp short change
ok: pop di
pop es
pop si
pop ds
pop ax
iret
capital_e:nop
codesg ends
end start
调用截图:
5.实验心得疑问建议
通过本次实验,掌握了中断程序设计的基本思路和方法,学会了保护现场和恢复现场的方法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论