汇编语言学习笔记 - 第十章

第 10 章 CALL 和 RET 指令

  • call 和 ret 指令都是转移指令,它们都修改IP,或同时修改CS和IP.它们经常被共同用来实现子程序的设计。

10.1 ret 和 retf

在这里插入图片描述

举例:
在这里插入图片描述
在这里插入图片描述

10.2 call 指令

  • CPU执行call指令时,进行两步操作:
    (1) 将当前的IP或CS和IP压入栈中;
    (2) 转移。
  • call指令不能实现短转移,除此之外,call指令实现转移的方法和 jmp 指令的原理相同。

10.3 依据位移进行转移的 call 指令

在这里插入图片描述

10.4 转移的目的地址在指令中的 call 指令

在这里插入图片描述

10.5 转移地址在寄存器中的 call 指令

在这里插入图片描述

10.6 转移地址在内存中的 call 指令

在这里插入图片描述
在这里插入图片描述

10.7 call 和 ret 的配合使用

举例:
在这里插入图片描述
在这里插入图片描述

举例:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

10.8 mul 指令

在这里插入图片描述

举例:
在这里插入图片描述

举例:
在这里插入图片描述

10.9 模块化程序设计

在这里插入图片描述

10.10 参数和结果传递的问题

  • 子程序一般都要根据提供的参数处理一定的事务,处理后,将结果(返回值遅供给调用者。

在这里插入图片描述

  • 用寄存器来存储参数和结果是最常使用的方法。对于存放参数的寄存器和存放结果的寄存器,调用者和子程序的读写操作恰恰相反:调用者将参数送入参数寄存器,从结果寄存器中取到返回值;子程序从参数寄存器中取到参数,将返回值送入结果寄存器。

举例:
在这里插入图片描述

10.11 批量数据的传递

  • 当我们需要传送的数据很多时,不能使用有限数量的寄存器来存放多个需要传递的数据(或者返回值)时,我们可以将批量数据放在内存中,然后将它们所在的内存空间的首地址放在寄存器中,传给需要的子程序。

举例:
在这里插入图片描述

10.12 寄存器冲突的问题

在这里插入图片描述
在这里插入图片描述

举例:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值