子程序的調(diào)用和返回指令.doc
《子程序的調(diào)用和返回指令.doc》由會員分享,可在線閱讀,更多相關(guān)《子程序的調(diào)用和返回指令.doc(2頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、子程序的調(diào)用和返回指令 子程序的調(diào)用和返回是一對互逆操作,也是一種特殊的轉(zhuǎn)移操作。 一方面,之所以說是轉(zhuǎn)移,是因為當(dāng)調(diào)用一個子程序時,程序的執(zhí)行順序被改變,CPU將轉(zhuǎn)而執(zhí)行子程序中的指令序列,在這方面,調(diào)用子程序的操作含有轉(zhuǎn)移指令的功能,子程序的返回指令的轉(zhuǎn)移特性與此類似; 另一方面,轉(zhuǎn)移指令是一種“一去不復(fù)返”的操作,而當(dāng)子程序完后,還要求CPU能轉(zhuǎn)而執(zhí)行調(diào)用指令之下的指令,它是一種“有去有回”的操作。 為了滿足子程序調(diào)用和返回操作的特殊性,在指令系統(tǒng)中設(shè)置了相應(yīng)的特定指令。 1、1調(diào)用指令(CALL) 調(diào)用子程序指令的格式如下: CALL 子程序名/Reg/Mem 子程序的調(diào)用指令分為近(near)調(diào)用和遠(far)調(diào)用。如果被調(diào)用子程序的屬性是近的,那么,CALL指令將產(chǎn)生一個近調(diào)用,它把該指令之后地址的偏移量(用一個字來表示的)壓棧,把被調(diào)用子程序入口地址的偏移量送給指令指針寄存器IP即可實現(xiàn)執(zhí)行程序的轉(zhuǎn)移 如果被調(diào)用子程序的屬性是遠的,那么,CALL指令將產(chǎn)生一個遠調(diào)用。這時,調(diào)用指令不僅要把該指令之后地址的偏移量壓進棧,而且也要把段寄存器CS的值壓進棧。在此之后,再把被調(diào)用子程序入口地址的偏移量和段值分別送給IP和CS,這樣完成了子程序的遠調(diào)用操作 00405600 call 00406895 00405604 ...... 子程序調(diào)用指令本身的執(zhí)行不影響任何標(biāo)志位,但子程序體中指令的執(zhí)行會改變標(biāo)志位,所以,如果希望子程序的執(zhí)行不能改變調(diào)用指令前后的標(biāo)志位,那么,就要在子程序的開始處保護標(biāo)志位,在子程序的返回前恢復(fù)標(biāo)志位。 例如: CALL DISPLAY ;DISPLAY是子程序名 CALL BX ;BX的內(nèi)容是子程序的偏移量 CALL WORD1 ;WORD1是內(nèi)存字變量,其值是子程序的偏移量 CALL DWORD1 ;DWORD1是雙字變量,其值是子程序的偏移量和段值 CALL word ptr [BX] ;BX所指內(nèi)存字單元的值是子程序的偏移量 CALL dword ptr [BX] ;BX所指內(nèi)存雙字單元的值是子程序的偏移量和段值 1、2返回指令(RET) 當(dāng)子程序執(zhí)行完時,需要返回到調(diào)用它的程序之中。為實現(xiàn)此功能,指令系統(tǒng)提供了一條專用的返回指令。其格式如下: RET/RETN/RETF [Imm] 子程序的返回在功能上是子程序調(diào)用的逆操作。為了與子程序的遠、近調(diào)用相對應(yīng),子程序的返回也分:遠返回和近返回。返回指令在堆棧操作方面是調(diào)用指令的逆過程- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 子程序 調(diào)用 返回 指令
鏈接地址:http://www.820124.com/p-6651362.html