中断指令 int n ---汇编语言基础语法

本文介绍8086/8088处理器中的int指令及其执行过程,包括标志寄存器的处理方式及中断例程的编写与安装方法。通过具体实例展示了如何实现一个计算平方的中断例程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自 https://blog.csdn.net/fivedoumi/article/details/8003002

int 指令
格式:int n
含义:n为中断类型码,用于引发中断过程。
执行过程:
1)取中断类型码n;
2)标志寄存器入栈,IF=0,TF=0;
**跟踪标志:**当TF被设置为1时,CPU进入单步模式,所谓单步模式就是CPU在 每执行一步指令后都产生一个单步中断。主要用于程序的调试。8086/8088中没有专门用来置位和清零TF的命令,需要用其他办法。
**中断标志:**决定CPU是否响应外部可屏蔽中断请求。IF为1时,CPU允许响应外部的可屏蔽中断请求。
3)CS、IP入栈
4)(IP)=(n4),(CS)=(n4+2)

编写中断处理程序的步骤
可以供应用程序调用的中断例程的编写方法。
例题:编写、安装中断7ch的中断全程,功能:求一word型数据的平方。
参数:(ax)=要计算的数据。

返回值:dx、ax中存放结果的高16位和低16位。

应用举例:求2*3456^2

assume cs:code
code segment
start:    mov ax,3456                 ;(ax)=3456
              int 7ch                         ;调用中断7ch的中断例程,计算ax中的数据的平方
              add ax,ax
              adc dx,dx                            ;dx:ax存放结果,将结果乘以2
              mov ax,4c00h
              int 21h          
code ends
end start

分析 我们要做的三部分工作:
1)编写实现平方功能的程序
2)安装程序,将其安装在0:200处
3)设置中断向量表,将程序的入口地址保存在7ch表项中,使其成为中断7ch的中断例程。

assume cs:code

code segment

 start:       mov ax,cs
              mov ds,ax
              mov si, offset sqr          ;设置ds:si指向源地址
              mov ax,0
              mov es,ax
              mov di, 200h                ;设置es:di指向目的地址
              mov cx, offset sqrend – offset sqr              ;设置cx为传输长度
              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,4c00h
              int 21h

        sqr:  mul ax
              iret
sqrend: nop
code ends
end start

(iret指令的功能为:
pop IP
pop CS
popf
用于释放资源,返回原来的应用程序)
CPU执行int 7ch指令进入中断例程之前,标志寄存器、当前的CS和IP被压入栈中,在执行完中断例程后,应该用iret指令恢复int 7ch执行前的标志寄存器和CS、IP的值,从而接着执行应用程序。
int指令和iret指令的配合使用与call指令和ret指令的配合使用具有相似的思路。
与cs+ip的调用寻址也有相似的寻址思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值