汇编语言_第10章 CALL和RET指令

call 和 ret 指令都是转移指令,它们都修改IP 或同时修改CS 和IP。
10.1 ret 和 retf

  • ret指令用栈中的数据,修改IP的内容,从而实现近转移;
  • retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。
    CPU 执行ret指令时,进行下面2步操作:
    (1) (IP)=((ss)*16+(sp))
    (2) (SP)=(SP)+2
    相当于:pop IP

CPU 执行retf指令时,进行下面4步操作:
(1) (IP)=((ss)*16+(sp))
(2) (SP)=(SP)+2
(3) (CS)=((ss)*16+(sp))
(4) (SP)=(SP)+2
相当于:pop IP
pop CS

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

10.3 依据位移进行转移的call指令
在这里插入图片描述

10.4 转移的目的地址在指令中的call指令
在这里插入图片描述

10.5 转移地址在寄存器中的call指令
在这里插入图片描述

10.6 转移地址在内存中的call指令
(1) call word ptr 内存单元地址
相当于: push IP
jmp word ptr 内存单元地址
(2) call dword ptr 内存单元地址
相当于: push CS
push IP
jmp dword ptr 内存单元地址

10.7 call 和 ret 配合使用
在这里插入图片描述
利用call 和 ret 实现子程序的机制:
标号:
指令
ret
具有子程序的源程序的框架如下:
在这里插入图片描述

10.8 mul 指令
mul 乘法指令,使用mul做乘法注意以下2点:
(1) 2个相乘的数:2个相乘的数,要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;如果是16位,一个默认在AX中,另一个放在16位reg或内存字单元中。
(2) 结果: 如果是8位乘法,结果默认放在AX中;如果是16位乘法,结果高位默认在DX中存放,低位在AX中存放。
在这里插入图片描述

10.9 参数和结果传递问题
在这里插入图片描述

10.10 批量数据的传递
在这里插入图片描述

10.11 寄存器冲突的问题
在这里插入图片描述

To be continue…

猜你喜欢

转载自blog.csdn.net/madao1234/article/details/84337945