汇编语言ret和ret汇编指令

ret指令用栈中的数据,修改IP的内容,从而实现近转移;
retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。
CPU执行ret指令时,进行下面两步操作:
(1)(IP) = ((ss)*16+(sp))
(2)(sp)=(sp)+2
CPU执行retf指令时,进行下面4步操作:
(1)(IP)=((ss)*16+(sp))
(2)(sp)=(sp)+2
(3)(CS)=((ss)*16+(sp))
(4)(sp)=(sp)+2
可以看出,如果我们用汇编语法来解释ret和retf指令,则:
CPU执行ret指令时,相当于进行:

pop IP

CPU执行retf指令时,相当于进行:

pop  ip
pop  cs

案例:
下面的程序中,ret指令执行后,(IP)=0} CS:IP指向代码段的第一条指令。

assume  cs:code
stack segment
  db 16 dup(0)
stack ends

code segment
              mov ax,4c00h
              int 21h

start:   mov ax,stack
         mov ss,ax
         mov sp,16
         mov ax,0
         push ax
         mov bx,0
         ret
code ends
end start

下面的程序中,retf指令执行后,CS:IP指向代码段的第一条指令

assume  cs:code
stack segment
  db 16 dup(0)
stack ends

code segment
              mov ax,4c00h
              int 21h

start:   mov ax,stack
         mov ss,ax
         mov sp,16
         mov ax,0
         push cs
         push ax
         mov bx,0
         retf
code ends
end start

发布日期:

所属分类: 编程 标签:  


没有相关文章!