第13章 int 指令

本系列博文参考《汇编语言》 作者 王爽

1 int 指令介绍
int n 指令,为中断指令。其中 n 为中断向量号。

int n指令的执行过程如下:
(1) 取得中断类型码n;
(2) 标志寄存器入栈,TF、IF设置为0;
(3) CS、IP入栈;
(4) ( I P ) = ( n 4 ) , ( C S ) = ( n 4 + 2 ) (IP)=(n * 4), (CS)=(n * 4+2)

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

发布了104 篇原创文章 · 获赞 134 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/sinat_38816924/article/details/89789566