筆記 組合語言 第10章 CALL和RET指令

2022-03-06 17:06:54 字數 1640 閱讀 5644

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 其他晶元,用來儲存相關的系統資訊,或進行相關的輸入輸出處理 在這些晶元...