电子说
call指令
CPU执行call指令时,进行两步操作:
(1)将当前的IP或CS和IP压入栈中;
(2)转移。
即:
(1)(sp) = (sp)-2
((ss)*16 +(sp)) = (IP)
(2)(IP) = (IP)+16位位移。
16位位移=“标号”处的地址-call指令后的第一个字节的地址
ret和retf指令
ret指令用栈中的数据,修改IP的内容,从而实现近转移;
retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。
CPU执行ret指令时,进行下面的两步操作:
(1)(IP) = ((ss)*16 +(sp))
(2)(sp) = (sp)+2
CPU执行retf指令时,进行下面四步操作:
(1)(IP) = ((ss)*16) + (sp)
(2)(sp) = (sp) + 2
(3)(CS) = ((ss)*16) + (sp)
(4)(sp) = (sp) + 2
中断过程的上下文切换:
在进程切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文。在进程未占用处理器时,进程的上下文是存储在进程的私有堆栈中的。
关于寄存器
64位环境中用rip rsp rbp表示
32位环境用eip esp ebp 表示
CS是代码段寄存器
IP是指令指针寄存器(相当于偏移地址)
SS:存放栈的段地址;
SP:堆栈寄存器SP(stack pointer)存放栈的偏移地址;
BP: 基数指针寄存器BP(base pointer),存储堆栈基地址。
SP,BP一般与段寄存器SS 联用,以确定堆栈寄存器中某一单元的地址。
全部0条评论
快来发表一下你的评论吧 !