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 联用,以确定堆栈寄存器中某一单元的地址。
-
处理器
+关注
关注
68文章
20149浏览量
247198 -
寄存器
+关注
关注
31文章
5589浏览量
129069 -
串口中断
+关注
关注
0文章
67浏览量
14543
发布评论请先 登录
编写一个任务调度程序,在上下文切换后遇到了一些问题求解
关于进程上下文、中断上下文及原子上下文的一些概念理解
BT堆栈上下文切换
上下文切换简介
上下文切换的情况发生
ucos上下文该怎么切换?
基于cortex-m3的rt-thread系统如何实现线程上下文切换呢
Cortex-M4在线程上下文切换中的优化
讨论ARM mbed OS(RTX) 的上下文切换
rt-thread上下文切换函数的意义在哪?
中断中的上下文切换详解
CPU上下文切换的详细资料讲解
如何分析Linux CPU上下文切换问题
Linux技术:什么是cpu上下文切换

上下文切换与栈寄存器变化
评论