call指令
CPU執(zhí)行call指令時(shí),進(jìn)行兩步操作:
(1)將當(dāng)前的IP或CS和IP壓入棧中;
(2)轉(zhuǎn)移。
即:
(1)(sp) = (sp)-2
((ss)*16 +(sp)) = (IP)
(2)(IP) = (IP)+16位位移。
16位位移=“標(biāo)號(hào)”處的地址-call指令后的第一個(gè)字節(jié)的地址
ret和retf指令
ret指令用棧中的數(shù)據(jù),修改IP的內(nèi)容,從而實(shí)現(xiàn)近轉(zhuǎn)移;
retf指令用棧中的數(shù)據(jù),修改CS和IP的內(nèi)容,從而實(shí)現(xiàn)遠(yuǎn)轉(zhuǎn)移。
CPU執(zhí)行ret指令時(shí),進(jìn)行下面的兩步操作:
(1)(IP) = ((ss)*16 +(sp))
(2)(sp) = (sp)+2
CPU執(zhí)行retf指令時(shí),進(jìn)行下面四步操作:
(1)(IP) = ((ss)*16) + (sp)
(2)(sp) = (sp) + 2
(3)(CS) = ((ss)*16) + (sp)
(4)(sp) = (sp) + 2
中斷過程的上下文切換:

在進(jìn)程切換時(shí),一個(gè)進(jìn)程存儲(chǔ)在處理器各寄存器中的中間數(shù)據(jù)叫做進(jìn)程的上下文。在進(jìn)程未占用處理器時(shí),進(jìn)程的上下文是存儲(chǔ)在進(jìn)程的私有堆棧中的。

關(guān)于寄存器
64位環(huán)境中用rip rsp rbp表示
32位環(huán)境用eip esp ebp 表示
CS是代碼段寄存器
IP是指令指針寄存器(相當(dāng)于偏移地址)
SS:存放棧的段地址;
SP:堆棧寄存器SP(stack pointer)存放棧的偏移地址;
BP: 基數(shù)指針寄存器BP(base pointer),存儲(chǔ)堆?;刂?。
SP,BP一般與段寄存器SS 聯(lián)用,以確定堆棧寄存器中某一單元的地址。
-
處理器
+關(guān)注
關(guān)注
68文章
20113瀏覽量
244495 -
寄存器
+關(guān)注
關(guān)注
31文章
5511瀏覽量
128488 -
串口中斷
+關(guān)注
關(guān)注
0文章
67瀏覽量
14527
發(fā)布評(píng)論請(qǐng)先 登錄
編寫一個(gè)任務(wù)調(diào)度程序,在上下文切換后遇到了一些問題求解
關(guān)于進(jìn)程上下文、中斷上下文及原子上下文的一些概念理解
BT堆棧上下文切換
上下文切換簡(jiǎn)介
上下文切換的情況發(fā)生
ucos上下文該怎么切換?
基于cortex-m3的rt-thread系統(tǒng)如何實(shí)現(xiàn)線程上下文切換呢
Cortex-M4在線程上下文切換中的優(yōu)化
討論ARM mbed OS(RTX) 的上下文切換
rt-thread上下文切換函數(shù)的意義在哪?
中斷中的上下文切換詳解
CPU上下文切換的詳細(xì)資料講解
如何分析Linux CPU上下文切換問題
Linux技術(shù):什么是cpu上下文切換

上下文切換與棧寄存器變化
評(píng)論