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)相关推荐

  1. call指令和ret指令的配合使用

    call指令和ret指令的配合使用 转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/28/3846633.html

  2. Call指令和Ret指令讲解

    Call指令和Ret指令讲解 转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/28/3846630.html

  3. 汇编语言随笔(2)-CPU指令周期和无条件转移指令(包括call和ret指令)

    指令周期 在执行一条指令的过程中,由CPU完成的操作序列构成一个指令周期,通常每一个指令周期一定会包含两个子周期:即取指令子周期和执行指令子周期.在取指令子周期,CPU将要执行的指令从内存中CS:IP ...

  4. 汇编语言笔记10-CALL和RET指令

    ☞模块化程序设计 模块化程序设计 汇编语言通过call和ret指令实现了模块化程序设计.可以实现多个相互联系.功能独立的子程序来解决一个复杂的问题. 子程序的框架 1 assume cs:code 2 ...

  5. 汇编 CALL和RET指令

    1 ret 和 retf call 和 ret 指令都是转移指令,他们都修改ip,或同时修改cs和ip,他们经常被共同用来实现子程序的设计. ret:该指令用栈中的数据,修改ip的内容,从而实现近转移 ...

  6. 王爽 汇编语言第三版 第10章 call 和 ret 指令 以及 子程序设计

    第10章 call 和 ret 指令 10.1 ret 和 reft 指令 call 和 ret 指令都是转移指令,他们都修改 IP,或同事修改 CS 和 IP .他们经常被共同来实现子程序的设计. ...

  7. 汇编语言(第三版)第十章 CALL 和 RET 指令 笔记

    call 和 ret 都是可以改变 ip 或是 cs 和 ip .经常用来实现子程序设计. 10.1 ret 和 retf ret指令用栈中的数据,修改IP实现近转移 retf指令用栈中的程序,修改c ...

  8. 7 call和ret指令

    call和ret指令 call 和ret 指令都是转移指令,它们都修改IP,或同时修改CS和IP.它们经常被共同用来实现子程序的设计. 1 ret和retf ret 指令用栈中的数据,修改IP 的内容 ...

  9. call指令和ret指令【笔记+详解】

    笔记目录 call指令和ret指令[笔记] 1 引子 2 call和ret的简单运用 3 call指令本质含义详解 4 ret指令 5 总结及汇编环境资源 call指令和ret指令[笔记] 1 引子 ...

  10. 汇编 第十章 call和ret指令

    第十章 call和ret指令 call和ret指令都是转移指令,它们都能修改ip,或同时修改cs和ip 10.1 ret和retf 1.ret指令用栈中的数据,修改ip的内容,从而实现[近转移]CPU ...

最新文章

  1. PHP如何进阶,提升自己
  2. d3h 技嘉b365m 黑苹果_黑苹果macOS10.15.4单硬盘三系统安装教程
  3. Linux 技巧:让进程在后台可靠运行的几种方法(转)
  4. 深度学习-Tensorflow2.2-RNN循环神经网络{11}-评论分类-25
  5. Caffe应用篇----文件格式转换
  6. cordova 5.0版本说明
  7. Apache发布NetBeans 10.0,增强对JDK 11的支持
  8. 大一考二级c语言,大专学生计算机二级是大一考还是大二考
  9. jQuery学习笔记(三):选择器总结
  10. 2013腾讯编程马拉松||HDU 4505 小Q系列故事——电梯里的爱情 水水水
  11. Sonar+Hudson+Maven构建系列之三:安装Hudson
  12. 电脑脱机状态怎么解除_win7系统如何解除脱机工作 win7系统解除脱机工作步骤【介绍】...
  13. java adt eclipse_在eclipse中添加android ADT
  14. Jmeter取样器设置
  15. 猫哥教你写爬虫 044--模拟浏览器-作业
  16. android定位周边,Android 使用高德SDK编写周边搜索定位
  17. css filter blur 白边,如何解决CSS3毛玻璃效果blur有白边的问题
  18. 临床血液学检验仪器与技术
  19. 内容创作者的春天—web3.0时代
  20. 网络:简述对家庭宽带和专线(企业宽带)的认识

热门文章

  1. 通过ppk私钥连接服务器中遇到的问题
  2. 音频变速变调原理及 soundtouch 代码分析
  3. 2020美容师(初级)考试及美容师(初级)证考试
  4. 微型计算机外部接口图,自考《微型计算机及其接口技术》学习方法(2)
  5. wifidog java_GitHub - FangStarNet/wifidog-java-portal: 由 Java 实现的 WiFiDog 认证服务
  6. 创建密码重设盘////密码重设盘修改密码
  7. 什么是CMA,具备CMA资质的软件第三方检测机构有哪些?
  8. Android_Activity_Activity详解
  9. ps一键滤镜网红文艺小清新VSCO全滤镜插件安装教程
  10. Julia 语言初学笔记