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指令的更多相关文章

  1. [汇编学习笔记][第十三章int指令]

    第十三章int指令 13.1 int指令 格式: int n, n 为中断类型码 可以用int指令调用任何一个中断的中断处理程序(简称中断例程). 13.4 BIOS和DOS 所提供的中断例程 BIO ...

  2. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  3. 汇编学习笔记(11)int指令和端口

    格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...

  4. int指令

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  5. CrossOver 13.0 发布,Windows 模拟器

    允许在 Linux 和 OS X 平台运行 Win32 程序的 CrossOver 套件发布 13.0 版本,带来了完全重构的 3D 处理流程,将大幅度提高游戏性能. Linux 平台相关变化有: 带 ...

  6. 关于int指令

    1.关于int指令 格式:int n     n为中断类型码: 作用:     调用n号中断程序:   指令“int n”的执行过程:     1]获取中断类型码n     2]标志寄存器入栈,IF. ...

  7. WeihanLi.Npoi 1.13.0 更新日志

    WeihanLi.Npoi 1.13.0 更新日志 Intro 在 Github 上收到 Issue 收到网友反馈希望支持自动分 Sheet 导出,有兴趣的可以参考 Issue https://git ...

  8. CM12.1/13.0编译教程

    环境搭建 1.安装64位Ubuntu系统(实体安装.虚拟机安装均可) 注意:要求机器至少4G内存(虚拟机至少分配4G内存),硬盘至少100G空间(源码20G+,编译后整个目录约60~70G) 安装方法 ...

  9. IntelliJ IDEA 发布最新版本13.0.1

    难闻转自:慧都控件网 值得高兴的消息,IntelliJ IDEA v13.0.1目前已经发布,相对于IntelliJ IDEA v13而言,此次更新内容,是略微改进和提高了性能,如代码输入变化,及完善 ...

随机推荐

  1. java 并发 concurrent Executor

    Excutor类 Executor 执行提交的对象Runnable任务. ExecutorService 一个Executor ,提供方法来管理终端和方法,可以产生Future为跟踪一个或多个异步任务 ...

  2. URL.createObjectURL() 实现本地上传图片 并预览功能

    URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL.这个 URL 的生命周期和创建它的窗口中的 document 绑定.这个新 ...

  3. centos/linux/ubuntu在局域网上网

    前言:对于服务器来说,一般不会安装windowns系统,都是会安装类unix系统,在局域网或者在内网中,上网还是走代理上网 1.知道代理服务器的ip及端口 2.就两条命令 export  http_p ...

  4. Java泛型用法总结

    普通泛型 class Point< T>{ // 此处可以随便写标识符号,T是type的简称 private T var ; // var的类型由T指定,即:由外部指定 public T ...

  5. ssh-copy-id Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 的解决方案

    -bash-4.2# ssh-copy-id 192.168.9.180 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new k ...

  6. sklearn交叉验证3-【老鱼学sklearn】

    在上一个博文中,我们用learning_curve函数来确定应该拥有多少的训练集能够达到效果,就像一个人进行学习时需要做多少题目就能拥有较好的考试成绩了. 本次我们来看下如何调整学习中的参数,类似一个 ...

  7. 统计一个数据库中,无记录的表的sql语句

    SQL Server数据库中统计无记录数的表 大家使用的时候,将sql脚本中的红色[TestDB] 换成你的目标数据库名称. /************************************ ...

  8. java集成swagger

    概览: java集成Swagger Swagger-UI的使用 Springboot跨域请求的访问解决 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 W ...

  9. git HEAD detached from origin 问题的解决

    这个问题是因为分支选错了,所以说后续的提交都提交到了一个匿名分支之上,整个状态是游离了的 下面说一下我解决问题的步骤 1.查看在游离状态下提交的最新commit号 git branch -v 2.创建 ...

  10. centos安装svn并创建版本库配置用户分组权限

    1.设置aliyun安装源// 本步骤非必须, 使用aliyun安装源后, 执行yum update速度明显提升 wget -O /etc/yum.repos.d/CentOS-Base.repo h ...