第十三章 INT指令-内中断
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BIOS和DOS所提供的中断例程
BIOS中主要包括一下几部分的内容
硬件系统的检测和初始化程序; 外部中断和内部中断的中断例程 用于对硬件设备进行I/O操作的中断例程 其他和硬件系统相关的中断例程
BIOS和DOS中断例程的安装过程
开机后,CPU加电,初始化(CS)=0FFFFh,(IP)=0,自 动从FFFF:0单元开始执行程序。 FFFF:0有一条跳转 指令,CPU执行该指令后,转去执行BIOS中的硬件系 统检测和初始化; 初始化程序将建立BIOS所支持的中断向量,即将 BIOS提供的中断例程的入口地址登记在中断向量表 中; 硬件系统检测和初始化完成后,调用int 19h进行操 作系统的引导。从而将计算机交由操作系统控制; DOS启动后,除完成其他工作外,还将它所提供的中 断例程装入内存,并建立相应的中断向量。
程序如下:
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 ;安装中断程序sqr 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
BIOS中断例程应用(续)
int 10h中断例程:设置光标位置
mov mov mov mov int ah,2 bh,0 dh,5 dl,12 10h ;置光标 ;第0页 ;行号 ;列号
页号:内存地址空间中,B8000h~BFFFFh共 32K的空间,为80*25彩色字符模式的显示缓 冲区,一屏的内容在显示缓冲区中共占4000 个字节。显示缓冲区分为8页,每页4K,显示 器可以显示任一页的内容。一般显示第0页的 内容。
子程序调用
主程序 ……
CALL SUBP 子程序
……
…… RET
……
DOS/BIOS调用 源程序 …… 实现机制不同 INT n ……
DOS/BIOS 例行程序
பைடு நூலகம்…… ……
IRET
BIOS和DOS基本调用
调用方法:
1、将调用参数装入指定的寄存器中;
2、BIOS或DOS功能号装入AH;
3、如需子功能号,把它装入AL;
int指令的功能和call指令相似,都是调用一段程序 一般情况下,系统将一些具有一定功能的子程序,以中 断处理程序的方式提供给应用程序调用,应用程序可以 使用int 指令调用这些子程序。 中断处理程序以后简称为中断例程
编写、安装中断7ch的中断例程
功能:求1个word型数据的平方 参数:(ax)=要计算的数据 返回值:dx,ax中存放结果的高16位和低16位 例如:求2*3456^2
第十三章 INT指令
——内中断
要点
Int n指令 编写、安装中断7ch的中断例程 BIOS和DOS中断例程
int指令
格式:int n 其中:n为中断类型码 功能:引发中断过程 可以使用int指令调用任何一个中断的 中断处理程序 例如:
int n中断的例子
assume cs:code code segment start:mov ax,0b800h mov es,ax mov byte ptr es:[12*160+40*2],’!’ int 0 code ends end start
mov mov mov mov int mov int code ends end start ax,data ds,ax dx,0 ah,9 21h ax,4c00h 21h
本章总结
深入掌握int n 指令 掌握编写可供调用的中断例程的方法 BIOS和DOS提供的中断例程及安装过程 BIOS和DOS中断例程应用
BIOS中断例程应用(续)
int 10h中断例程:在光标位置显示字符
mov mov mov mov mov int ah,9 ;置光标 al,’a’ bl,7 bh,0 ;第0页 cx,3 10h
BIOS中断例程应用(续)
编程:在屏幕的5行12列显示3个红底高亮闪烁绿色的’a’ assume cs:code code segment mov ah,2 ;置光标 mov bh,0 ;第0页 mov dh,5 mov dl,12 int 10h mov ah,9 mov al,'a' mov bl,0cah mov bh,0 mov cx,3 int 10h mov ax,4c00h int 21h code ends end
编写、安装中断7ch的中断例程(2)
功能:将一个全是字母,以0结尾的字符串,转换为大写 参数:ds:si指向字符串的首地址 返回值:无 例如:将data段中的字符串转换为大写
assume cs:cde 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
程序如下
assume cs:code code segment start:mov ax,cs mov ds,ax mov si,offset sqr mov ax,0 mov es,ax mov di,200h mov cx,offset sqrend - offset sqr cld rep movsb ;安装中断程序sqr 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 sqr: mul ax iret ;求平方 sqrend: nop code ends end start
assume cs:cde code segment start: mov ax,3456 int 7ch add ax,ax adc dx,0 mov ax,4c00h int 21h code ends end start
需要完成的工作
编写实现求平方功能的程序sqr 安装程序,将其安装在0:200处 设置中断向量表,将程序的入口地址保 存在7ch表项中
DOS中断例程应用——int 21h
4ch号功能:程序返回
mov ah,4ch mov al,0 int 21h
9号功能:在光标位置显示字符串
ds:dx指向字符串 mov ah,9 int 21h
DOS中断例程应用——int 21h
编程:在屏幕的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 mov dh,5 mov dl,12 int 21h
4、按中断号调用DOS或BIOS中断(INT);
5、检查或取得返回参数。
BIOS中断例程应用
int 10h 中断例程是BIOS提供的中断例 程,其中包含了多个和屏幕输出相关的 子程序。 一般的,一个供程序员调用的中断例程 中常包括多个子程序,中断例程内部用 传递进来的参数来决定执行哪个子程序。 BIOS和DOS提供的中断例程,都用ah 来传递内部子程序的编号。