call指令
CPU執(zhí)行call指令時,進(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)號”處的地址-call指令后的第一個字節(jié)的地址
ret和retf指令
ret指令用棧中的數(shù)據(jù),修改IP的內(nèi)容,從而實現(xiàn)近轉(zhuǎn)移;
retf指令用棧中的數(shù)據(jù),修改CS和IP的內(nèi)容,從而實現(xiàn)遠(yuǎn)轉(zhuǎn)移。
CPU執(zhí)行ret指令時,進(jìn)行下面的兩步操作:
(1)(IP) = ((ss)*16 +(sp))
(2)(sp) = (sp)+2
CPU執(zhí)行retf指令時,進(jìn)行下面四步操作:
(1)(IP) = ((ss)*16) + (sp)
(2)(sp) = (sp) + 2
(3)(CS) = ((ss)*16) + (sp)
(4)(sp) = (sp) + 2
中斷過程的上下文切換:
在進(jìn)程切換時,一個進(jìn)程存儲在處理器各寄存器中的中間數(shù)據(jù)叫做進(jìn)程的上下文。在進(jìn)程未占用處理器時,進(jìn)程的上下文是存儲在進(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),存儲堆棧基地址。
SP,BP一般與段寄存器SS 聯(lián)用,以確定堆棧寄存器中某一單元的地址。
-
處理器
+關(guān)注
關(guān)注
68文章
19342瀏覽量
230227 -
寄存器
+關(guān)注
關(guān)注
31文章
5357瀏覽量
120632 -
串口中斷
+關(guān)注
關(guān)注
0文章
67瀏覽量
13935
發(fā)布評論請先 登錄
相關(guān)推薦
評論