一步步學彙編(九)call ret

2021-05-24 23:57:28 字數 1015 閱讀 3925

一步步學彙編(九) call & ret

call和ret指令都是轉移指令,都修改ip,或同時修改cs和ip。經常被用來

實現子程式的設計。

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

cpu執行call指令是進行的操作:

(1) 將當前的ip或cs和ip壓入棧中

(2) 轉移

依據位移驚醒轉移的call指令操作:

(1) (sp)=(sp)-2

((ss)*16+(sp))=(ip)

(2) (ip)=(ip)+16位位移

"call far ptr 標號"實現的是段間轉移,其操作如下:

(1)(sp)=(sp)-2

((ss)*16+(sp))=(cs)

(sp)=(sp)-2

((ss)*16+(sp))=(ip)

(2)(cs)=標號所在段的段位址

(ip)=標號在段中的偏移位址

"call 16位暫存器",操作如下:

(sp)=(sp)-2

((ss)*16+(sp))=(ip)

(ip)=(16位暫存器)

mul指令:乘法指令

兩個相乘的數,要麼都是8位要麼都是16位,如果是8位,乙個預設放在ah

中,另乙個放在記憶體位元組單元中或8位暫存器中,如果是16位,乙個預設

放在ax中,另乙個放在記憶體字單元中或16位暫存器中

相乘的結果:如果是8位,結果預設放在ax中;如果是16位乘法,結果高位預設

放在dx中,低位預設放在ax中

一步步學ROS

最近因為看svo的 裡面用到catkin決定要好好看ros,年前學會基本操作。啟動節點 rosrun package name executable name 檢視節點 rosnode list 注 rosout 節點是乙個特殊的節點,通過 roscore 自動啟動 檢視特定節點的資訊 rosnod...

一步步學彙編(十一)內中斷

一步步學彙編 十一 內中斷 中斷 cpu不再接著 剛執行完得指令 向下執行,而是轉去處理這個特殊的 資訊cpu用8位的中斷型別碼通過向量表找到相應的中斷處理程式的入口位址。乙個表項存放乙個中斷向量,佔兩個字,高位址字存放段位址,低位址字存放 偏移位址 中斷過程 1 從中斷資訊中 取得中斷型別碼 2 ...

一步步學彙編(六)記憶體定址方式

昨天逛西湖去了,沒好好學習 不過鍛鍊了身體 加油 三水 and指令 邏輯與指令,將操作物件的相應位設為0 or指令 邏輯或指令,將操作物件的相應位設為1 只要編碼和解碼採用同樣的規則,我們就可以將人能理解的資訊 存入計算機,再從計算機中取出 小寫字母的ascii碼值比大寫字母的大20h 重要 大寫字...