第十三章 int指令
1、int指令:CPU执行int n,相当于引发一个n号中断的中断过程。因此,一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。
2、int和iret指令配合跟call和ret指令相似。
3、注意寄存器值的保存和恢复。
4、对int、iret和栈的深入理解:用7ch中断完成loop指令。
5、 BIOS和DOS中断例程的安装
判断下面说法的正误:
1.我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。
答:这种说法是错误的。因为该内存单元具有‘只读’属性。
2.int 19h中断例程,可以由DOS提供。
答:这种说法是错误的。因为int 19h是在DOS启动之前就被执行的中断例程,这里面涉及到一个先后次序的问题,而此次序不能被打乱。
6、BIOS中断例程的应用:int 10h中断例程是BIOS提供的中断例程,其中包含了多个和屏幕输出相关的子程序。BIOS和DOS提供的中断例程,都是用ah来传递内部子程序的编号。
7、DOS中断例程的应用:int 21h中断例程是DOS提供的中断例程,其中包含了DOS提供给程序员在编程时调用的子程序。我们之前一直使用的是int 21中断例程的4ch号功能,即程序返回功能,
即:mov ah,4ch ;程序返回
mov al,0 ; 返回值
int 21h
8、int 21h中断例程在光标位置显示字符串的功能:
View Code
1 assume cs:code
2
3 code segment
4 start:mov ax,cs
5 mov ds,ax
6 mov si,0ffset capital
7 mov ax,0
8 mov es,ax
9 mov di,200h
10 mov cx,offset capitalend - offset capital
11 cld ;设置传输方向为正
12 rep movsb
13
14 mov ax,0
15 mov es,ax
16 mov word ptr es:[7ch*4],200h
17 mov word ptr es:[7ch*4+2],0
18
19 mov ax,4c00h
20 int 21h
21
22 capital:push cx ;中断中要用到cx和si寄存器先保存起来
23 push si ;避免寄存器冲突
24
25 change: mov cl,[si]
26 mov ch,0
27 jcxz ok
28 and byte ptr [si],11011111b
29 int si
30 jmp short change
31
32 ok:pop si
33 pop cx
34 iret
35
36 capitalend:nop
37
38 code ends
39 end start
View Code
1 ;在屏幕的5行12列显示字符串"I love English"
2 ;注意:要显示的字符需用"$"作为结束符
3 assume cs:code
4
5 data segment
6 db "I love English$"
7 data ends
8
9 code segment
10
11 start:;设置光标位置
12 mov ah,2
13 mov bh,0 ;第0页
14 mov dh,5 ;第5行
15 mov dl,12 ;第12列
16 int 10h
17
18 ;在光标位置显示字符
19 mov ax,data
20 mov ds,ax
21 mov dx,0
22 mov ah,9 ;功能号,表示在光标位置显示字符串
23 int 21h
24
25 mov ax,4c00h
26 int 21h
27
28 code ends
29 end start