10.0 概述
call和ret指令都是轉移指令,它們都修改ip,或同時修改cs和ip。它們經常被用來共同實現子程式的設計。
10.1 ret和retf
ret指令用棧中的資料,修改ip的內容,即相當於
pop ip
retf指令用棧中的資料,修改cs和ip的內容,即相當於
pop ip
pop cs
10.2 call指令
cpu執行call指令時,進行兩步操作
1) 將當前的ip或cs和ip壓入棧中
2) 轉移
call指令不能實現短轉移,除此之外,call指令實現轉移的方式與jmp指令的原理相同。
10.3 依據位移進行轉移的call指令
call 標號 ;(將當前ip壓棧,轉到標號處開始執行)
此操作相當於:
push ip
jmp near ptr 標號
10.4 轉移的目的位址在指令中的call指令
call far ptr 標號 ;(實現段間轉移)
此操作相當於:
push cs
push ip
jmp far ptr 標號
10.5 轉移位址在暫存器中的call指令
call reg16
相當於:
push ip
jmp reg16
10.6 轉移位址在記憶體中的call指令
1) call word ptr 記憶體單元位址
相當於:
push ip
jmp word ptr 記憶體單元位址;(段內轉移)
2) call dword ptr 記憶體單元位址
相當於:
push cs
push ip
jmp dword ptr 記憶體單元位址;(段間轉移)
10.7 call和ret的配合使用
可以利用call和ret來實現子程式的機制。
10.8 mul指令
mul指令是乘法指令,使用時應注意:
(1) 兩個相乘的數:要麼都是8位,要麼都是16位。如果是8位,乙個預設放在al中,另乙個放在8位reg或記憶體位元組單元中;如果是16位,乙個預設放在ax中,另乙個放在16位reg或記憶體字單元中。
(2) 結果:如果是8位乘法,結果預設存放在ax中;如果是16位乘法,結果高位預設在dx中存放,低位在ax中存放。
10.9 模組化程式設計
call和ret指令共同支援了組合語言程式設計中的模組化設計。
10.10 引數和結果傳遞的問題
用暫存器來儲存引數和結果是最常用的方法。呼叫者將引數送入引數暫存器,從結果暫存器中取到返回值。子程式的讀寫動作正好相反。
10.11 批量資料的傳遞
對於批量資料,可以將批量資料存放到記憶體中,然後將它們所在的記憶體空間首位址放在暫存器中,傳遞給需要的子程式。
對於具有批量資料的返回結果,也可以用此方法。
注:除了用暫存器傳遞引數外,還可以使用棧傳遞引數。參見附註4
10.12 暫存器衝突的問題
編寫子程式時,可先將子程式用到的暫存器入棧,過程結束後,再將這些暫存器出棧恢復。
實驗10 編寫子程式
1.顯示字串
2.解決除法溢位的問題
3.數值顯示
課程設計1
略
組合語言第10章筆記
call 和 ret 指令都是轉移指令,它們修改ip,或同時修改cs和ip。ret指令用棧中的資料,修改ip的內容,實現近轉移 retf指令用棧中的資料,修改cs和ip的內容,實現遠轉移。ret指令相當於 pop ip retf 指令相當於 pop ip pop cs call指令 1 將當前的ip...
組合語言 call 指令
call指令經常跟ret指令配合使用,因此cpu執行call指令,進行兩步操作 將當前的 ip 或 cs和ip 壓入棧中 轉移 jmp call指令不能實現短轉移,除此之外,call指令實現轉移的方法和 jmp 指令的原理相同。call 標號 近轉移 cpu執行此種格式的call指令時,相當於進行 ...
筆記 組合語言 第14章 埠
14.0 概述 pc機系統中,和cpu通過匯流排相連的晶元除了各種儲存器外,還有以下3種晶元 1 各種介面卡 如網絡卡,顯示卡 上的的介面晶元,它們控制介面卡進行工作 2 主機板上的介面晶元,cpu通過他們對部分外設進行訪問 3 其他晶元,用來儲存相關的系統資訊,或進行相關的輸入輸出處理 在這些晶元...