汇编语言-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 内存单元地址

posted @ 2024-11-13 15:33  zhongta  阅读(19)  评论(0编辑  收藏  举报