汇编语言-CALL和RET指令
call和ret都是转移指令,修改Ip或同时修改cs ip。
1.ret和retf
ret指令用栈中的数据,修改ip的内容。从而实现近转移
retf指令用栈中的数据,修改cs和ip的内容,从而实现远转移。
CPU执行ret指令时,进行下面两步操作
(IP)=((SS)*16+(SP))
(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
2.CALL指令
(1)将当前的ip或cs和IP压入栈中
(2)转移
call指令不能实现短转移
3.依据位移进行转移的call指令
call 标号(将当前的IP压栈后,转到标号处执行指令)
进行的操作是:
(1)(SP)=(SP)-2
((SS)*16+(SP))=(IP)
(IP)=(IP)+16位位移
16位位移=标号处地址-call指令后的第一个字节的地址
16位位移的表示范围-32768-32767,用补码表示
16位位移由编译程序在编译时算出。
相当于:
push IP
jmp near ptr 标号
4.转移的目的地址在指令中的call指令
(1)(SP)=(SP)-2
((SS16)+(SP))=(CS)
(SP)=(SP)-2
((SS)16+(SP))=(IP)
(2)(CS)=标号所在段的段地址
(IP)=标号在段中的偏移地址
相当于
push cs
push ip
jmp far ptr 标号
5.转移地址在寄存器中的call指令
(sp)=(sp)-2
((ss)*16+(sp))=(IP)
(IP)=(16位reg)
相当于push IP
jmp 16位reg
6.转移地址在内存中的call指令
(1)call word ptr 内存地址
相当于
push IP
jmp word ptr 内存地址
(2)call dword ptr 内存单元地址
相当于
push CS
push IP
jmp dword ptr 内存单元地址

浙公网安备 33010602011771号