1 int 指令介绍
int n 指令,为中断指令。其中 n 为中断向量号。
int n指令的执行过程如下:
(1) 取得中断类型码n;
(2) 标志寄存器入栈,TF、IF设置为0;
(3) CS、IP入栈;
(4)
int n 指令和函数的执行过程相似。中断与函数调用的区别
在我看来,选择条件+函数和中断过程类似,可以用程序实现中断。如果从结果来看,软件实现和硬件互通。这是我的单片机博客。当然可能理解不对,暂时是这么认为的。
2 简单常用的 int 中断
(1)int 10h中断例程的设置光标位置功能
mov ah,2 ;置光标
mov bh,0 ;第0页
mov dh,5 ;dh中放行号
mov dl,12 ;dl中放列号
int 10h
(2)int 10h中段例程的在光标位置显示字符的功能
mov ah,9 ;在光标处显示字符
mov al,‘a’ ;字符
mov bl,7 ;颜色属性
mov bh,0 ;第0页
mov cx,3 ;字符重复个数
int 10h
… … … … …
3 实验
用中断的方式,写一个中断函数,代替loop。
(本章最后一个实验也interesting)
;--------------------
;编写并安装int 7ch的中断例程,功能为完成loop指令的功能
;参数 = cx ,bx = 位移
;在屏幕中间显示80个“!”
;dacao 2019/5/3
;--------------------
assume cs:code
code segment
start:
;拷贝中断函数
mov ax,cs
mov ds,ax
mov si,offset insteadloop
mov ax,0
mov es,ax
mov di,200h
mov cx, offset insteadloop_end - offset insteadloop
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,0b800h
mov es,ax
mov di,160*12
mov bx,offset s - offset se
mov cx,80
s: mov byte ptr es:[di],'!'
add di,2
int 7ch
se:nop
mov ax,4c00h
int 21h
;通过修改ip的值进行跳转
insteadloop:push bp
dec cx ;将cx减一操作
jcxz ok ;如果cx是0,ip不变,向下执行
mov bp,sp ;如果cx不是0,修改ip
add ss:[bp+2],bx
ok: pop bp
iret
insteadloop_end:nop
code ends
end start
参考文章:
http://www.cangzhang.com/1838.html
https://blog.csdn.net/onetrianee/article/details/79668150