一步步學彙編(九) 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 重要 大寫字...