汇编语言中的call指令
来源:互联网 发布:w7怎么禁止装软件 编辑:程序博客网 时间:2024/05/16 04:52
在汇编语言中,call指令和ret,retf指令联合起来使用是模块化编程的基本方法,下面就介绍一下个人总结的call指令的用法
call指令有多种使用格式:
这里先看看所有的用法,然后来总结一下:
1、call + 标号
这个指令是先将call + 标号的下一条语句的IP放入栈中,然后使当前的IP+16位位移
看到上面的解释会让你想到什么?会想到jmp指令吧,jmp有个指令格式是:jmp near ptr 标号,这里的call唯一这种jmp多的一步就是多了一次入栈操作;
继续看:
2、call far ptr + 标号
这个指令是先将call指令的下一个指令的代码段地址入栈,再把call下一条指令的偏移地址入栈,然后使其跳到标号所在处
这又会让你想到什么?还是jmp指令,jmp指令的: jmp far ptr 标号, 这种jmp的使用是在段间转移的,这种call和jmp的区别就是多了两次入栈的操作;
继续:
3、call + 16位寄存器
这个指令先将call的下一条指令的IP入栈,然后再以ax为IP的代码处
这还是会想到jmp指令:jmp + 16位寄存器,这里的call唯一比jmp多的一步就是多了一步入栈操作;
再来:
4、call word ptr + 内存单元地址
这个指令的是先将call指令的下一条指令的IP入栈,然后跳到以内存单元地址为IP的代码处
这里同样还是会联想到jmp指令的:jmp word ptr + 内存单元地址,这里的call比jmp多的一步同样是入栈的操作;
最后的:
5、call dword ptr + 内存单元地址
这个指令先将call指令的下一条指令的CS入栈,再将call指令的下一条指令的IP入栈,然后跳到以内存单元的高位为CS,低位为IP的代码处
这里还是会想到jmp指令:jmp dword ptr + 内存单元地址,这里的call和jmp的区别还是多了入栈的操作
综上所述:
call指令:
第一步:先将call指令的下一条指令的CS和IP入栈(当然如果是段间转移就要将CS和IP入栈,如果是段内转移就只要将IP入栈)
第二步:就是操作与call对应的jmp指令
所有的call指令都是可以用上面的两步来确定的,这是个通用的法则。
- 汇编语言中的call指令
- 汇编语言--call和ret指令
- 8086汇编语言 call指令实例
- 汇编语言中的call
- 8086汇编语言 call far ptr指令实例
- 8086汇编语言 call word ptr指令示例
- 汇编语言笔记10-CALL和RET指令
- 汇编语言中的串传送指令
- 汇编语言中的指令浅谈有无符号指令
- 汇编语言09——Call和Ret指令
- 【汇编语言/底层开发】10、CALL和RET指令
- 汇编语言 call和ret指令 的具体执行
- 汇编语言学习第十章-CALL和RET指令
- 王爽 《汇编语言》 读书笔记 十 CALL和RET指令
- arm中的汇编语言之ARM指令集
- 读王爽老师汇编语言笔记---转移指令的原理和call,ret指令
- 转移地址在内存中的call指令
- 汇编语言-指令
- MYSQL建立外键失败几种情况记录Can't create table不能创建表
- 复习——线性表
- 浏览器缓存详解:expires,cache-control,last-modified,etag详细说明
- JAVA8 十大新特性详解
- Struct2应用开发步骤
- 汇编语言中的call指令
- 后缀自动机(最长公共子串、模板)spoj1811
- 写在2015年的第一天
- PL/SQL 数据类型和变量 -- BOOLEAN
- 挑剔的人生--迎接2015
- Java基础学习笔记1
- Mysql中关于Could not retrieve transation read-only status server
- Unity3D学习笔记之三Prefab组件的使用
- web学习