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
?1924次閱讀
過多的上下文切換會消耗 CPU 的時間來保存和恢復寄存器、程序計數器、內核棧和虛擬內存等數據,從而導致系統性能顯著下降。 既然上下文切換對系
發表于 09-01 09:31
?444次閱讀
嵌入式實時操作系統(RTOS)中的上下文切換是指保存和恢復任務的狀態,以使調度程序能夠切換到另一個任務,從而促進多任務處理。
發表于 11-21 15:48
?1117次閱讀
評論