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

第 10 章

  • 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 寄存器冲突的问题

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

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