int指令

int指令的格式为:int n(n为类型中断码)它的功能是引发中断过程。
CPU执行int 指令,相当于引发一个n号中断的中段过程,执行过程如下:

(1)取中断类型码n;

(2)标志寄存器入栈,IF=0,TF=0;

(3)CS,IP入栈;

(4)(IP)=(n* 4),(CS)=(n*4+2)。

从此转去执行n号中断的中断处理程序。

一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。我们在编程的时候,可以用int指令调用这些子程序。当然,也可以自己编写一些中断处理程序供别人使用。

编写供应用程序调用的中断例程(中断处理程序)

eg:
功能:将一个全是字母,以0结尾的字符串,转换为大写。
参数:ds:si指向字符串的首地址。

安装中断

assume cs:code

code segment
 start:
     mov ax,cs
     mov ds,ax
     mov si,offset capital
     mov ax,0
     mov es,ax
     mov di,200h
     mov cx,offset capitalend-offset capital
     cld
     rep movsb

     mov ax,0
     mov es,ax
     mov word ptr es:[7ch*4],200h
     mov word ptr es:[7ch*4+2],0

     mov ax,4c00h
     int 21h

 capital:
     push cx
     push si
 change:
     mov cl,[si]
     mov ch,[0]
     jcxz ok
     and byte ptr [si],11011111b
     inc si
     jmp short change
 ok:
     pop si
     pop cx
     iret
 capitalend:
     nop
code ends

end start

调用中断:

assume cs:code

data segment
    db 'conversation',0
data ends

code segment
 start:
     mov ax,data
     mov ds,ax
     mov si,0
     int 7ch

     mov ax,4c00h
     int 21h
code ends

end start

eg:编写并安装int 7ch中断例程,功能为完成loop指令的功能。
参数:(CX)=循环次数,(bx)=位移。
安装7ch例程:

assume cs:code

code segment
 start:
     mov ax,cs
     mov ds,ax
     mov si,offset do0
     mov ax,0
     mov es,ax
     mov di,200h
     mov cx,offset do0end-offset do0
     cld 
     rep movsb

     mov word ptr es:[7ch*4],200h
     mov word ptr es:[7ch*4+2],0

     mov ax,4c00h
     int 21h
 do0:
     push bp

     dec cx
     jcxz ok
     mov bp,sp
     add [bp+2],bx
 ok:
     pop bp
     iret
 do0end:
     nop
code ends

end start

实际使用7ch中断

assume cs:code
code segment
 start:
     mov ax,0b800h
     mov es,ax
     mov di,160*12
     mov bx,offset s-offset se
     mov cx,80
 s:
     mov byte ptr es:[di],'!'
     mov byte ptr es:[di+1],2
     add di,2
     int 7ch
 se:
     nop

     mov ax,4c00h
     int 21h
code ends

end start

CPU执行int7ch的中断例程之前,标志寄存器、当前的CS和IP被压入栈中,在执行完中断例程后,应该用iret指令恢复int 7ch执行前的标志寄存器和CS、IP的值,从而接着执行应用程序。

BIOS和DOS所提供的中断例程

在系统板的ROM中存放着一套程序,称为BIOS(基本输入输出系统),BIOS中主要包含以下几个部分的内容。

(1)硬件系统的检测和初始化程序;

(2)外部中断和内部中断的中断例程;

(3)用于对硬件设备进行I/O操作的中断例程;

(4)其他和硬件系统相关的中断例程。

和硬件设备相关的DOS中断历程中,一般都调用了BIOS的中断例程。

BIOS和DOS中断例程的安装过程:

(1)开机后,CPU一加电,初始化(CS)=0FFFFH,(IP)=0,自动从FFFF:0单元开始执行程序。FFFF:0处有一条跳转指令,CPU执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序。

(2)初始化程序将建立BIOS所支持的中断向量,即将BIOS所提供的中断例程的入口地址登记在中断向量表中。注意,对于BIOS所提供的中断例程,只需将入口地址登记在中断向量表即可,因为他们是固化到ROM中的程序,一直在内存中存在。

(3)硬件系统检测和初始化完成后,调用int 19h进行操作系统的引导。从此将计算机交由操作系统控制。

(4)DOS启动后,除完成其他工作外,还将它所提供的中断例程装入内存,并建立相应的中断向量。俄国

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值