call指令
CPU執(zhí)行call指令時,進行兩步操作:
(1)將當前的IP或CS和IP壓入棧中;
(2)轉移。
即:
(1)(sp) = (sp)-2
((ss)*16 +(sp)) = (IP)
(2)(IP) = (IP)+16位位移。
16位位移=“標號”處的地址-call指令后的第一個字節(jié)的地址
ret和retf指令
ret指令用棧中的數(shù)據,修改IP的內容,從而實現(xiàn)近轉移;
retf指令用棧中的數(shù)據,修改CS和IP的內容,從而實現(xiàn)遠轉移。
CPU執(zhí)行ret指令時,進行下面的兩步操作:
(1)(IP) = ((ss)*16 +(sp))
(2)(sp) = (sp)+2
CPU執(zhí)行retf指令時,進行下面四步操作:
(1)(IP) = ((ss)*16) + (sp)
(2)(sp) = (sp) + 2
(3)(CS) = ((ss)*16) + (sp)
(4)(sp) = (sp) + 2
中斷過程的上下文切換:
在進程切換時,一個進程存儲在處理器各寄存器中的中間數(shù)據叫做進程的上下文。在進程未占用處理器時,進程的上下文是存儲在進程的私有堆棧中的。
關于寄存器
64位環(huán)境中用rip rsp rbp表示
32位環(huán)境用eip esp ebp 表示
CS是代碼段寄存器
IP是指令指針寄存器(相當于偏移地址)
SS:存放棧的段地址;
SP:堆棧寄存器SP(stack pointer)存放棧的偏移地址;
BP: 基數(shù)指針寄存器BP(base pointer),存儲堆?;刂?。
SP,BP一般與段寄存器SS 聯(lián)用,以確定堆棧寄存器中某一單元的地址。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
相關推薦
\"rfe\" 不會在 A[11] 寄存器中設置新的返回地址。 當任務函數(shù)以\"ret16\" 結束時,μC 將在陷阱中運行。
我在上下文切換的準備過程中錯過了什么?
在上下文切換/\"rfe\" 之后,A[11] 的正確行為是
發(fā)表于 05-22 07:50
調用,用戶空間的應用程序就會進入內核空間,由內核代表該進程運行于內核空間,這就涉及到上下文的切換,用戶空間和內核空間具有不同的 地址映射,通用或專用的寄存器組,而用戶空間的進程要傳遞很多變量、參數(shù)給內核
發(fā)表于 09-06 09:58
100ms就會產生一個上下文切換。上下文切換每秒似乎有點高。我想我真的不能抱怨10個開關,但是有什么東西嗎?在BT協(xié)議中真的需要這個嗎?不能處理中斷驅動嗎?(這是BT是可連接的,但既沒有連接,也沒有
發(fā)表于 12-17 16:30
處理系統(tǒng)中,CPU需要處理所有程序的操作,當用戶來回切換它們時,需要記錄這些程序執(zhí)行到哪里。上下文切換就是這樣一個過程,他允許CPU記錄并恢復各種正在運行程序的狀態(tài),使它能夠完成切換操作。
發(fā)表于 08-06 08:08
處理系統(tǒng)中,CPU需要處理所有程序的操作,當用戶來回切換它們時,需要記錄這些程序執(zhí)行到哪里。上下文切換就是這樣一個過程,他允許CPU記錄并恢復各種正在運行程序的狀態(tài),使它能夠完成切換操作。
發(fā)表于 08-07 08:38
有兩個問題請教一下大神!??!-->1在ucos中的上下文切換時發(fā)生在pendSV異常中,代碼見下:PendSV_Handler CPSIDI; Prevent interruption
發(fā)表于 08-26 03:21
rt_interrupt_from_thread變量設置為空。線程上下文切換是,上下文保存在各個線程的棧空間中, 這里我們只需要在PendSV中手動保存和恢復r4-r11寄存器,因為其
發(fā)表于 05-05 15:00
cortex-m4相對比cortex-m3,在線程上下文切換中,主要增加了FPU寄存器,總共需要保存34個寄存器,合計136byte。因此原來在cortex-m3上面運行的程序在cortex-m4f
發(fā)表于 08-05 10:58
1. 墊話從本文開始,正式進入對調度實現(xiàn)細節(jié)及底層的探討。本文討論 ARM mbed OS(RTX) 的上下文切換。解構調度器,按說不應該從“上下文切換”如此 meta 的細節(jié)入手。但從我個人角度
發(fā)表于 02-16 14:26
Cortex-M3內核上下文切換函數(shù)rt_hw_context_switch()/ rt_hw_context_switch_interrupt()中有個判斷rt_thread_switch_interrupt_flag的地方,不知道意義在哪?
發(fā)表于 03-10 11:28
任務上下文切換的訴求。 為什么在中斷服務函數(shù)中會產生任務上下文切換的訴求?因為中斷中可能會進行信號量post之類的動作(這可能會觸發(fā)此前一直處于pend狀態(tài)的,且比當前被中斷打斷的任務優(yōu)先級更高的任務
發(fā)表于 03-23 17:18
當UCOS-III轉向執(zhí)行另一項新任務的時候,他保存了當前任務的CPU寄存器到堆棧,并從新任務的堆棧CPU寄存器載入CPU,這個過程叫做上下文切換
發(fā)表于 08-16 17:31
?2次下載
在我的上一篇文章:《探討 Linux CPU 的上下文切換》中,我談到了 CPU 上下文切換的工作原理??焖倩仡櫼幌?,CPU 上下文切換是保證 Linux 系統(tǒng)正常運行的核心功能??煞譃檫M程上
發(fā)表于 05-05 20:11
?1901次閱讀
過多的上下文切換會消耗 CPU 的時間來保存和恢復寄存器、程序計數(shù)器、內核棧和虛擬內存等數(shù)據,從而導致系統(tǒng)性能顯著下降。 既然上下文切換對系
發(fā)表于 09-01 09:31
?431次閱讀
嵌入式實時操作系統(tǒng)(RTOS)中的上下文切換是指保存和恢復任務的狀態(tài),以使調度程序能夠切換到另一個任務,從而促進多任務處理。
發(fā)表于 11-21 15:48
?1081次閱讀
評論