call指令
操作
- 将当前的ip或cs压入栈中
- 转移
这里的转移与jmp相同,也有位移和内存两种方式
根据位移
call 标号(将ip压入栈中后,转移到标号处进行指令)
过程:
- sp+=2,ss*16+sp=ip
- ip=ip+16位位移
16位位移=标号处地址-call指令后第一个字节的地址
相当于 push ip,jmp near ptr 标号
根据目的地址
call far ptr 实现段间转移
操作:
- sp-=2
- ss16+sp=cs
3.sp-=2
4.ss16+sp=ip - cs=标号所在段地址,ip=;标号所在偏移地址
段内转移一般是根据位移,段间转移一般是根据地址
如果地址在寄存器中, call reg,ip被修改
如果地址在内存中
1 call word ptr 内存地址
这种是段内转移,相当于 push ip,jmp word ptr
2 call dword ptr 内存地址
段间转移 例
call dword ptr ds:[0] ,这样ds:[0]和ds:[1]是ip ,ds:[2]和ds:[3]是cs
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment