汇编语言学习笔记 - 第十章
第十章
第 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 寄存器冲突的问题
举例: