汇编-13.0-int指令
1.int指令
int指令的格式为:int n,n为中断类型码,它的功能是引发中断过程。
执行int n指令,相当于引发一个中断号为n的中断过程。
(1).取中断类型码n;
(2).标志寄存器入栈,IF=0,TF=0;
(3).CS、IP入栈;
(4).(IP)=(n*4),(CS)=(n*4+2).
int指令的最终功能是和call指令相似,都是调用子程序。
2.编写应用程序调用的中断例程
(1).
功能:求一word型数据的平方。
参数:(ax)= 要计算的数据。
返回值:dx、ax中存放结果的高16位和低16位。
应用举例:求2*3456^2
assume cs:code
code segment
start:mov ax, ;(ax)=3456
int 7ch ;调用中断7ch的中断过程,计算ax中数据的平方
add ax,ax
adc dx,dx ;dx:ax存放结果,将结果乘以2
mov ax,4c00h
int 21h
code ends
end start
(2).中断例程
*编写实现要求平方的程序;
*安装程序,将其安装在0:200处;
*设置中断向量表,将程序的入口地址保存在7ch表项中,使其成为中断7ch的中断例程。
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset sqr ;设置ds:si指向源地址
mov ax,
mov es,ax
mov di,200h ;设置es:di指向目的地址
mov cx,offset ssqrend-offset sqr ;设置cx为传输长度
cld ;设置传输方向,标志寄存器的DF位置0
rep movsb mov ax,
mov es,ax
mov word ptr es:[7ch*],200h
mov word ptr es:[7ch*+], ;设置中断向量表 mov ax,4c00h
int 21h sqr: mul ax
iret
sqrend:nop code ends
end start
在中断例程的最后,要使用iret指令,返回程序原来正在执行的位置。
3. 对int、iret指令的深入理解
loop s的执行需要两个信息,循环次数和到s的位移,所以,7ch中断例程完成loop指令的功能,也需要这两个信息
作为参数。
assume cs:code
code segment
start:mov ax,0b800h
mov es,ax
mov di,* mov bx,offset s-offset se ;设置从标号se到标号s的转移位移
mov cx,
s: mov byte ptr es:[di],'!'
add di,
int 7ch
se: nop
mov ax,4c00h
int 21h code ends
end start
int 7ch引发中断过程后,进入7ch中断过程,在中断过程中,当前的标志寄存器、CS和IP都要压栈,此时压栈的CS和IP
的内容,分别是调用程序的段地址(可以认为是标号s的段地址)和int 7ch后的第一条指令的偏移地址(即标号se的偏移地址)。
在中断例程中,可以从栈里取得标号s的段地址和标号se的偏移地址,而用标号se的偏移地址加上bx中存放的位移就可以得到
标号s的偏移地址。
可以利用iret指令,我们将栈中的se的偏移地址加上bx 的转移位移,则栈中的se的偏移地址就变为了s的偏移地址。再使用iret指令,
用栈中的内容设置CS、IP,实现转移到s的标号处
lp: push bp
mov bp,sp
dec cx jcxz lpret add [bp+],bx lpret:pop bp iret
因为要访问栈,使用了bp,在程序开始处将bp入栈,结束时出栈恢复。当要修改栈中se的偏移地址时,栈中的情况:
栈顶时bp原来的值,下面是se的偏移地址,在下面是s的段地址,再下面是标志寄存器的值。
此时,bp中为栈顶的偏移地址,所以((ss)*16+(bp)+2)处为se的偏移地址,将它加上bx中的转移位移就变为s的
偏移地址。最后用iret出栈,CS:IP即从标号S处返回开始执行指令。
如果cx=0,则不需要修改栈中se的偏移地址,直接返回即可。
4.BIOS和DOS所提供的中断例程
在系统板的ROM中存放着一套程序,称为DIOS(基本输入输出系统),BIOS中主要包含以下几部分:
(1).硬件系统的检测和初始化程序;
(2).外部中断和内部中断;
(3).用于对硬件设备进行I/O操作的中断例程;
(4).其他硬件系统相关的中断例程。
5.BIOS和DOS中断例程的安装过程
6.BIOS中断例程应用
一般来说,一个供程序员调用的中断例程往往包含多个子程序,中断例程内部传递进来的参数决定执行哪一个子程序
BIOS和DOS提供的中断例程,都是用ah来传递内部子程序的编号。
7.DOS中断例程应用
int 21h中断例程是DOS提供的中断例程,其中包括了DOS提供给程序员编程时调用的子程序。
一般使用int 21h中断例程的4ch号功能,即程序返回功能:
mov ah,4ch ;程序返回
mov al, ;返回值
int 21h
(ah)=4表示调用第21号中断例程4ch号子程序,功能为程序返回,可以提供返回值作为参数。
汇编-13.0-int指令的更多相关文章
- [汇编学习笔记][第十三章int指令]
第十三章int指令 13.1 int指令 格式: int n, n 为中断类型码 可以用int指令调用任何一个中断的中断处理程序(简称中断例程). 13.4 BIOS和DOS 所提供的中断例程 BIO ...
- 汇编入门学习笔记 (十二)—— int指令、port
疯狂的暑假学习之 汇编入门学习笔记 (十二)-- int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...
- 汇编学习笔记(11)int指令和端口
格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...
- int指令
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- CrossOver 13.0 发布,Windows 模拟器
允许在 Linux 和 OS X 平台运行 Win32 程序的 CrossOver 套件发布 13.0 版本,带来了完全重构的 3D 处理流程,将大幅度提高游戏性能. Linux 平台相关变化有: 带 ...
- 关于int指令
1.关于int指令 格式:int n n为中断类型码: 作用: 调用n号中断程序: 指令“int n”的执行过程: 1]获取中断类型码n 2]标志寄存器入栈,IF. ...
- WeihanLi.Npoi 1.13.0 更新日志
WeihanLi.Npoi 1.13.0 更新日志 Intro 在 Github 上收到 Issue 收到网友反馈希望支持自动分 Sheet 导出,有兴趣的可以参考 Issue https://git ...
- CM12.1/13.0编译教程
环境搭建 1.安装64位Ubuntu系统(实体安装.虚拟机安装均可) 注意:要求机器至少4G内存(虚拟机至少分配4G内存),硬盘至少100G空间(源码20G+,编译后整个目录约60~70G) 安装方法 ...
- IntelliJ IDEA 发布最新版本13.0.1
难闻转自:慧都控件网 值得高兴的消息,IntelliJ IDEA v13.0.1目前已经发布,相对于IntelliJ IDEA v13而言,此次更新内容,是略微改进和提高了性能,如代码输入变化,及完善 ...
随机推荐
- Java_Number(装箱和拆箱)
所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number子类 装箱: 自动将基本数据类型装换为包装器类型 拆箱: 自动将包装器类型转换为基本数据类 ...
- springMVC下载中文文件名乱码【转】
//遇到的现象是,下载含有中文文件名的文件时,能获取到文件,但是使用IE正常,使用firefox,chrome文件名却乱码.//既然如此,就区分一下浏览器再返回好了,处理方式如下 //RESTfull ...
- [原创]基于Zynq AXI-Bram Standalone & Linux 例程
基于Zynq AXI-Bram Standalone & Linux 例程 待添加完善中
- python开发环境搭建及numpy基本属性-【老鱼学numpy】
目的 本节我们将介绍如何搭建python的开发环境以及numpy的基本属性,这样可以检验我们的numpy是否安装正确了. python开发环境的搭建 工欲善其事必先利其器,我用得比较顺手的是Intel ...
- python全栈开发day111-flask路由及其参数,Flask配置,蓝图,几个装饰器、闪现、send_file、jsonify
1.endpoint参数,解决视图函数重名问题(包括装饰后重名问题) http://www.cnblogs.com/eric-nirnava/p/endpoint.html 每个应用程序app都有一个 ...
- Python学习(三十六)—— Cookie、Session和自定义分页
一.Django中操作Cookie 获取Cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR ...
- PTA L2-001 紧急救援 (带权最短路)
<题目链接> 题目大意: 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...
- Jupyter-notebook 不自动打开浏览器解决办法
我的系统是Manjaro Linux, 一直以来,我使用jupyter-notebook的办法都是使用命令sudo jupyer-notebook --allow-root,然后手动复制粘贴URLS到 ...
- UVA 548 Tree 建树
题意: 输入中序和后序的权值,输出哪个叶子使它到根的路径上权和最小. 思路: 输入后建树,然后dfs求最小的叶子. #include<iostream> #include<cstdi ...
- DAPP 开发直通车-如何基于NEL 轻钱包来开发DAPP
之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程. 但是涉及多工种,多步骤.入手还是非常困难的. 经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你: 开发DAPP f ...