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文章
19740瀏覽量
232914 -
寄存器
+關注
關注
31文章
5401瀏覽量
122804 -
串口中斷
+關注
關注
0文章
67瀏覽量
14189
發布評論請先 登錄
相關推薦
編寫一個任務調度程序,在上下文切換后遇到了一些問題求解
關于進程上下文、中斷上下文及原子上下文的一些概念理解
BT堆棧上下文切換
上下文切換簡介
上下文切換的情況發生
ucos上下文該怎么切換?
基于cortex-m3的rt-thread系統如何實現線程上下文切換呢
Cortex-M4在線程上下文切換中的優化
討論ARM mbed OS(RTX) 的上下文切換
rt-thread上下文切換函數的意義在哪?
中斷中的上下文切換詳解
CPU上下文切換的詳細資料講解

如何分析Linux CPU上下文切換問題
Linux技術:什么是cpu上下文切換

評論