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,即中断开放;
4CPU正在执行的程序不是中断服务程序,或者是中断优先级较低的中断服务程序。
2.中断响应过程:
1)首先将标志寄存器FLAGS压入堆栈,将陷阱标志TF存入暂存器;
2)将TFIF清零,IF=0即关中断;
3)将正在运行程序的断点CSIP压入堆栈;
4)从中断向量表中取出中断向量高两个字节的内容送入CS,取出低两个字节的内容送入IP
5)转到相应中断源的中断服务程序入口,执行中断处理服务程序。
3.编写软件中断处理子程序步骤:
1)保护现场;
2STI开中断指令;如允许中断嵌套,则断开中断;
3)处理中断;
4CLI关中断指令;
5)恢复现场;
6IRET指令,返回被中断的程序。
______________________________________________________________________________
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:02ff256个字节空间不会被占用,所以将中断向量设置为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小时内删除。