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 联用,以确定堆栈寄存器中某一单元的地址。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
\"rfe\" 不会在 A[11] 寄存器中设置新的返回地址。 当任务函数以\"ret16\" 结束时,µC 将在陷阱中运行。
我在上下文切换的准备过程中错过了什么?
在上下文切换/\"rfe\" 之后,A[11] 的正确行为是
发表于 05-22 07:50
调用,用户空间的应用程序就会进入内核空间,由内核代表该进程运行于内核空间,这就涉及到上下文的切换,用户空间和内核空间具有不同的 地址映射,通用或专用的寄存器组,而用户空间的进程要传递很多变量、参数给内核
发表于 09-06 09:58
100ms就会产生一个上下文切换。上下文切换每秒似乎有点高。我想我真的不能抱怨10个开关,但是有什么东西吗?在BT协议中真的需要这个吗?不能处理中断驱动吗?(这是BT是可连接的,但既没有连接,也没有
发表于 12-17 16:30
处理系统中,CPU需要处理所有程序的操作,当用户来回切换它们时,需要记录这些程序执行到哪里。上下文切换就是这样一个过程,他允许CPU记录并恢复各种正在运行程序的状态,使它能够完成切换操作。
发表于 08-06 08:08
处理系统中,CPU需要处理所有程序的操作,当用户来回切换它们时,需要记录这些程序执行到哪里。上下文切换就是这样一个过程,他允许CPU记录并恢复各种正在运行程序的状态,使它能够完成切换操作。
发表于 08-07 08:38
有两个问题请教一下大神!!!-->1在ucos中的上下文切换时发生在pendSV异常中,代码见下:PendSV_Handler CPSIDI; Prevent interruption
发表于 08-26 03:21
rt_interrupt_from_thread变量设置为空。线程上下文切换是,上下文保存在各个线程的栈空间中, 这里我们只需要在PendSV中手动保存和恢复r4-r11寄存器,因为其
发表于 05-05 15:00
cortex-m4相对比cortex-m3,在线程上下文切换中,主要增加了FPU寄存器,总共需要保存34个寄存器,合计136byte。因此原来在cortex-m3上面运行的程序在cortex-m4f
发表于 08-05 10:58
1. 垫话从本文开始,正式进入对调度实现细节及底层的探讨。本文讨论 ARM mbed OS(RTX) 的上下文切换。解构调度器,按说不应该从“上下文切换”如此 meta 的细节入手。但从我个人角度
发表于 02-16 14:26
Cortex-M3内核上下文切换函数rt_hw_context_switch()/ rt_hw_context_switch_interrupt()中有个判断rt_thread_switch_interrupt_flag的地方,不知道意义在哪?
发表于 03-10 11:28
任务上下文切换的诉求。 为什么在中断服务函数中会产生任务上下文切换的诉求?因为中断中可能会进行信号量post之类的动作(这可能会触发此前一直处于pend状态的,且比当前被中断打断的任务优先级更高的任务
发表于 03-23 17:18
当UCOS-III转向执行另一项新任务的时候,他保存了当前任务的CPU寄存器到堆栈,并从新任务的堆栈CPU寄存器载入CPU,这个过程叫做上下文切换
发表于 08-16 17:31
•2次下载
在我的上一篇文章:《探讨 Linux CPU 的上下文切换》中,我谈到了 CPU 上下文切换的工作原理。快速回顾一下,CPU 上下文切换是保证 Linux 系统正常运行的核心功能。可分为进程上
发表于 05-05 20:11
•1908次阅读
过多的上下文切换会消耗 CPU 的时间来保存和恢复寄存器、程序计数器、内核栈和虚拟内存等数据,从而导致系统性能显着下降。 既然上下文切换对系
发表于 09-01 09:31
•438次阅读
嵌入式实时操作系统(RTOS)中的上下文切换是指保存和恢复任务的状态,以使调度程序能够切换到另一个任务,从而促进多任务处理。
发表于 11-21 15:48
•1096次阅读
评论