做网站和做appseo 视频
一、call指令
 1.1 依据位移进行转移:call 标号
1.2 实现段间转移:call far ptr 标号
1.3 转移地址在寄存器中:call 16位寄存器
1.4 转移地址在内存中
1.4.1 call word ptr 内存单元地址
1.4.2 call dword ptr 内存单元地址
二、ret和retf指令
2.1 ret指令:近转移
2.2 retf指令:远转移
call和ret指令都是转移指令,它们都能修改ip,或同时修改cs和ip。call和ret需要配合使用。
一、call指令
CPU执行call指令,进行两步操作:
- 将当前的ip或cs和ip压入栈中
 - 转移
 
call指令不能实现短转移,除此之外,call指令实现转移的方法和jmp指令的原理相同。
1.1 依据位移进行转移:call 标号
执行的操作如下:
- (sp) = (sp)-2 ;栈顶移动
 - ((ss)*16+(sp)) = (ip) ;当前ip内容压栈
 - (ip) = (ip)+16位位移 ;跳转到标号处
 
相当于执行:
- push ip
 - jmp near ptr 标号
 
1.2 实现段间转移:call far ptr 标号
执行的操作如下:
- (sp) = (sp)-2 ;栈顶移动
 - ((ss)×16+(sp)) = (cs) ;先把cs压栈
 - (sp) = (sp)-2 ;栈顶移动
 - ((ss)×16+(sp)) = (ip) ;然后把ss压栈
 
相当于执行:
- push cs
 - push ip
 - jmp far ptr 标号
 
1.3 转移地址在寄存器中:call 16位寄存器
执行的操作如下:
- (sp) = (sp) - 2
 - ((ss) × 16 + (sp)) = (ip)
 - (ip) = (16位寄存器)
 
相当于执行:
- push ip
 - jmp 16位寄存器
 
1.4 转移地址在内存中
1.4.1 call word ptr 内存单元地址
汇编语法解释:
- push ip
 - jmp word ptr 内存单元地址
 
1.4.2 call dword ptr 内存单元地址
汇编语法解释:
- push cs
 - push ip
 - jmp dword ptr 内存单元地址
 
二、ret和retf指令
2.1 ret指令:近转移
        ret指令用栈中的数据,修改ip的内容,从而实现【近转移】
         CPU执行ret指令时,进行下面两步操作:
- (ip)=((ss)*16+(sp)) ;ip的值修改为栈顶的内容
 - (sp)=(sp)+2 ;栈顶移动
 
相当于执行:
- pop ip
 
2.2 retf指令:远转移
        retf指令用栈中的数据,修改cs和ip的内容,从而实现【远转移】
         CPU执行retf指令时,进行下面四步操作
- (ip)=((ss)*16+(sp)) ;ip的内容修改为栈顶的内容
 - (sp)=(sp)+2 ;栈顶移动
 - (cs)=((ss)*16+(sp)) ;cs的内容修改为栈顶移动之后,栈顶的内容
 - (sp)=(sp)+2 ;栈顶移动
 
相当于执行:
- pop ip
 - pop cs
 
