CALL和RET指令(1)
Call指令
作用:调用子程序
实质:流程转移
call指令实现转移得方法和jmp指令的原理相似
格式:call标号
CPU执行call指令,进行两步操作:
(1)将当前的IP或CS和IP压入栈中
(2)转移
call标号
CPU执行此种格式的call指令时,进行如下的操作:
(1)(sp)=(sp)-2
((ss)*16+(sp))=(IP)
(2)(IP)=(IP)+16位位移
16位位移=标号处的地址-call指令后的第一个字节的地址;
16位移位移的范围-32768~32767;
16位位移由编译程序在编译时算出;
之前的博客中我们讲过jmp指令的运转方式
那这里类似于
push IP
jmp near ptr 标号(段内转移)
“Call far ptr 标号”实现的是段间转移
其操作过程
(1)(sp)=(sp)-2;
((ss)*16+(sp))=(CS)
(sp)=(sp)-2
((ss)*16+(sp))=(IP)
(2)(CS)=标号所在段的地址
(IP)=标号在段中的偏移地址
相当于:
push CS
push IP
jmp far ptr 标号(段间转移)
转移地址在寄存器中的call指令
指令格式:
call 16位reg
功能:
(sp)=(sp)-2
((ss)*16+(sp))=(IP)
(IP)=(16位reg)
相当于:
push IP
jmp 16位 reg
转移地址在内存中的call指令
(1)call word ptr 内存单元地址
用汇编语法来解释此种格式的call指令
CPU执行“call word ptr 内存单元地址“时。相当于进行:
push IP
jmp word ptr 内存单元地址
Ag:
mov sp,10H
mov ax,0123H
mov ds:[0],ax
call word ptr ds:[0]
执行后
IP=0123H
sp=0EH
(2)call dword ptr 内存单元地址
用汇编语法来解释此种格式的call指令
CPU执行“call dword ptr 内存单元地址“时。相当于进行:
push CS
push IP
jmp dword ptr 内存单元地址
Ag:
mov sp,10H
mov ax,0123h
mov ds:[0],ax;低地址放偏移地址
mov word ptr ds:[2],0;高地址存放段地址
call dword ptr ds:[0]
执行后CS=0
IP=0123H
sp=0CH
ret和retf
ret指令用栈中的数据,修改IP的内容,从而实现近转移
rerf指令用栈中的数据,修改CS和IP的内容,从而实现远转移
CPU执行ret指令时
(1)(IP)=((ss)*16+(sp))
(2)(sp)=(sp)+2
相当于:
POP IP
Ag
上图中在mov bx,0后少写了
ret这里注意一下
CPU执行retf指令时
(1)(IP)=((ss)*16+(sp))
(2)(sp)=(sp)+2
(3)(CS)=((ss)*16+(sp))
(4)(sp)=(sp)+2
相当于:
POP IP
POP CS
Ag
call和ret的配合使用
具有子程序的源程序的框架如下
assume cs:code
code segment
main:
call sub1 ;调用子程序 sub1
mov ax,4c00h
int 21h
sub1:
call sub2
ret
sub2
ret
code ends
end main
我们通过问题来加深前面的理解
计算2的N次方
我们执行命令后看到IP的值确实返回了
同时算出的值在BX中
但是有个问题
我们观察到这个栈段,使它随机分配的,这是很危险的,可能有时候是运行不了的
正确的程序
我们通过d命令去看一下,执行call指令后栈中的数据
尾部A3 01
的确是压栈了
mul指令
前面的博客中我写了关于div的除法指令
这里mul就是乘法指令
(1)两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;如果是16位,一个默认在AX中,另一个放在16位reg或内存子单元中
(2)结果:如果是8位乘法,结果默认放在AX中;如果是16位乘法,结果高位默认在DX中存放,低位在AX中放
格式如下;
mul reg
mul 内存单元
内存单元可以用不同的寻址方式给出
Ag
mul byte ptr ds:[0]
含义:(AX)=(AL)*((ds)*16+0)
mul word ptr [bx+si+8]
含义:(AX)=(AX)((ds)16+(bx)+(si)+8)结果的低16位
(DX)=(AX)((ds)16+(bx)+(si)+8)结果的高16位
CALL和RET指令(1)相关推荐
- call指令和ret指令的配合使用
call指令和ret指令的配合使用 转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/28/3846633.html
- Call指令和Ret指令讲解
Call指令和Ret指令讲解 转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/28/3846630.html
- 汇编语言随笔(2)-CPU指令周期和无条件转移指令(包括call和ret指令)
指令周期 在执行一条指令的过程中,由CPU完成的操作序列构成一个指令周期,通常每一个指令周期一定会包含两个子周期:即取指令子周期和执行指令子周期.在取指令子周期,CPU将要执行的指令从内存中CS:IP ...
- 汇编语言笔记10-CALL和RET指令
☞模块化程序设计 模块化程序设计 汇编语言通过call和ret指令实现了模块化程序设计.可以实现多个相互联系.功能独立的子程序来解决一个复杂的问题. 子程序的框架 1 assume cs:code 2 ...
- 汇编 CALL和RET指令
1 ret 和 retf call 和 ret 指令都是转移指令,他们都修改ip,或同时修改cs和ip,他们经常被共同用来实现子程序的设计. ret:该指令用栈中的数据,修改ip的内容,从而实现近转移 ...
- 王爽 汇编语言第三版 第10章 call 和 ret 指令 以及 子程序设计
第10章 call 和 ret 指令 10.1 ret 和 reft 指令 call 和 ret 指令都是转移指令,他们都修改 IP,或同事修改 CS 和 IP .他们经常被共同来实现子程序的设计. ...
- 汇编语言(第三版)第十章 CALL 和 RET 指令 笔记
call 和 ret 都是可以改变 ip 或是 cs 和 ip .经常用来实现子程序设计. 10.1 ret 和 retf ret指令用栈中的数据,修改IP实现近转移 retf指令用栈中的程序,修改c ...
- 7 call和ret指令
call和ret指令 call 和ret 指令都是转移指令,它们都修改IP,或同时修改CS和IP.它们经常被共同用来实现子程序的设计. 1 ret和retf ret 指令用栈中的数据,修改IP 的内容 ...
- call指令和ret指令【笔记+详解】
笔记目录 call指令和ret指令[笔记] 1 引子 2 call和ret的简单运用 3 call指令本质含义详解 4 ret指令 5 总结及汇编环境资源 call指令和ret指令[笔记] 1 引子 ...
- 汇编 第十章 call和ret指令
第十章 call和ret指令 call和ret指令都是转移指令,它们都能修改ip,或同时修改cs和ip 10.1 ret和retf 1.ret指令用栈中的数据,修改ip的内容,从而实现[近转移]CPU ...
最新文章
- PHP如何进阶,提升自己
- d3h 技嘉b365m 黑苹果_黑苹果macOS10.15.4单硬盘三系统安装教程
- Linux 技巧:让进程在后台可靠运行的几种方法(转)
- 深度学习-Tensorflow2.2-RNN循环神经网络{11}-评论分类-25
- Caffe应用篇----文件格式转换
- cordova 5.0版本说明
- Apache发布NetBeans 10.0,增强对JDK 11的支持
- 大一考二级c语言,大专学生计算机二级是大一考还是大二考
- jQuery学习笔记(三):选择器总结
- 2013腾讯编程马拉松||HDU 4505 小Q系列故事——电梯里的爱情 水水水
- Sonar+Hudson+Maven构建系列之三:安装Hudson
- 电脑脱机状态怎么解除_win7系统如何解除脱机工作 win7系统解除脱机工作步骤【介绍】...
- java adt eclipse_在eclipse中添加android ADT
- Jmeter取样器设置
- 猫哥教你写爬虫 044--模拟浏览器-作业
- android定位周边,Android 使用高德SDK编写周边搜索定位
- css filter blur 白边,如何解决CSS3毛玻璃效果blur有白边的问题
- 临床血液学检验仪器与技术
- 内容创作者的春天—web3.0时代
- 网络:简述对家庭宽带和专线(企业宽带)的认识
热门文章
- 通过ppk私钥连接服务器中遇到的问题
- 音频变速变调原理及 soundtouch 代码分析
- 2020美容师(初级)考试及美容师(初级)证考试
- 微型计算机外部接口图,自考《微型计算机及其接口技术》学习方法(2)
- wifidog java_GitHub - FangStarNet/wifidog-java-portal: 由 Java 实现的 WiFiDog 认证服务
- 创建密码重设盘////密码重设盘修改密码
- 什么是CMA,具备CMA资质的软件第三方检测机构有哪些?
- Android_Activity_Activity详解
- ps一键滤镜网红文艺小清新VSCO全滤镜插件安装教程
- Julia 语言初学笔记