第13章 int指令
引言
中断信息可以来自cpu的内部和外部,当cpu的内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。
13.1 int指令
int格式:int n,n为中断类型码,它的功能是引发中断过程。
cpu执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下:
1)取中断类型码n
2)标志寄存器入栈,IF=0,TF=0;
3)CS、ip入栈
4)ip=n*4,CS=n*4+2
从此转去执行n号中断的中断处理程序。
可以在程序中使用int指令调用任何一个中断的中断处理程序。
一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。
13.4 BIOS和DOS所提供的中断例程
在系统板的ROM中存放着一套程序,称为BIOS(基本输入输出系统),BIOS中主要包含以下几部分内容。
1)硬件系统的检测和初始化程序;
2)外部中断和内部中断的中断例程
3)用于对硬件设备进行I/O操作的中断例程
4)其他和硬件系统相关的中断例程。
和硬件设备相关的DOS中断例程中,一般都调用BIOS的中断例程。
13.5 BIOS和DOS中断例程的安装过程
1)开机后,CPU一加电,初始化CS=0FFFFh,ip=0,自动从FFFF:0单元开始执行程序。FFFF:0处有一条跳转指令,CPU执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序。
2)初始化程序建立BIOS所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。
3)硬件系统检测和初始化完成后,调用int 19h进行操作系统的引导。从此将计算机交由操作系统控制。
4)DOS启动后,除完成其他工作外,还将它所提供的中断例程装入内存,并建立相应的中断向量。
13.6 BIOS中断例程的应用
int 10h中断例程是BIOS提供的中断例程,其中包含了多个和屏幕输出相关的子程序。
一般来说,一个供程序员调用的中断例程中往往包括多个子程序,中断例程内部用传递进来的参数来决定执行哪个子程序。
BIOS和DOS提供的中断例程,都用ah来传递内部子程序的编号。
;编程:在屏幕的5行12列显示字符串“welcome to masm!”。 assume cs:code data segment db 'Welcome to masm!','$' data ends code segment start: mov ah,2 ;置光标 mov bh,0 ;第0页 mov dh,5 ;dh中放行号 mov dl,12 ;dl中放列号 int 10h mov ax,data mov ds,ax mov dx,0 ;ds:dx指向字符串的首地址data:0 mov ah,9 int 21h mov ax,4c00h int 21h code ends end start
上述程序在屏幕的5列12行显示字符串“welcome to masm!”,直到遇见’$‘($本身并不显示,只起到边界的作用)
如果字符串比较长,遇到行尾,程序会自动转到下一行开头处继续显示,如果到了最后一行,还能自动上卷一行。