微機(jī)原理及應(yīng)用 課件 5.32 程序控制指令之過程調(diào)用和返回指令_第1頁
微機(jī)原理及應(yīng)用 課件 5.32 程序控制指令之過程調(diào)用和返回指令_第2頁
微機(jī)原理及應(yīng)用 課件 5.32 程序控制指令之過程調(diào)用和返回指令_第3頁
微機(jī)原理及應(yīng)用 課件 5.32 程序控制指令之過程調(diào)用和返回指令_第4頁
微機(jī)原理及應(yīng)用 課件 5.32 程序控制指令之過程調(diào)用和返回指令_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

微機(jī)原理及應(yīng)用第五章8086指令系統(tǒng)第三十二講程序控制指令之過程

調(diào)用和返回指令下面我們來學(xué)習(xí)過程調(diào)用指令程序控制指令之過程調(diào)用和返回指令過程調(diào)用指令的操作碼是CALL,它的功能是暫定執(zhí)行當(dāng)前程序,轉(zhuǎn)去另外一個(gè)過程或者叫做子程序的地方繼續(xù)執(zhí)行,當(dāng)這個(gè)過程或子程序執(zhí)行完畢時(shí),再返回到當(dāng)前程序處繼續(xù)執(zhí)行.因此,CALL指令和返回指令成對(duì)出現(xiàn),那么這里的另一個(gè)過程或者子程序通常是指什么呢?過程調(diào)用指令操作碼:CALL暫定執(zhí)行當(dāng)前程序,轉(zhuǎn)去另外一個(gè)過程或者叫做子程序的地方繼續(xù)執(zhí)行當(dāng)這個(gè)過程或子程序執(zhí)行完畢時(shí),再返回當(dāng)前程序繼續(xù)執(zhí)行CALL指令和返回指令成對(duì)出現(xiàn)另一個(gè)過程或者子程序通常指什么?其實(shí),我們?cè)诰帉懸粋€(gè)主程序的過程中,編寫一個(gè)主程序時(shí)過程調(diào)用指令其實(shí),我們?cè)诰帉懸粋€(gè)主程序的過程中,如果有一些模塊被反復(fù)的使用,那么這些模塊就可以被獨(dú)立出來編寫成一個(gè)子程序主程序在需要的時(shí)候就調(diào)用子程序,執(zhí)行完子程序以后再返回到主程序中繼續(xù)執(zhí)行有一些模塊被反復(fù)的使用可被獨(dú)立編寫一個(gè)子程序主程序需要時(shí)調(diào)用子程序執(zhí)行后再返回主程序執(zhí)行編寫一個(gè)主程序時(shí)過程調(diào)用指令過程調(diào)用指令分段內(nèi)調(diào)用和段間調(diào)用大家可以聯(lián)想我們前面學(xué)習(xí)過的跳轉(zhuǎn)指令來理解段內(nèi)調(diào)用和段間調(diào)用的含義過程調(diào)用指令段內(nèi)調(diào)用段間調(diào)用聯(lián)想跳轉(zhuǎn)指令理解含義段內(nèi)調(diào)用的含義是子程序跟主程序在一個(gè)代碼段內(nèi),因此調(diào)用的時(shí)候不需要修改CS的值,只修改IP的值即可。段間調(diào)用的含義是子程序跟主程序不在一個(gè)代碼段內(nèi),此時(shí)調(diào)用指令就既要修改CS的值,又要修改IP的值。通常在子程序名中前加NEAR表示段內(nèi)調(diào)用,加FAR表示段間調(diào)用,過程調(diào)用指令段內(nèi)調(diào)用子程序跟主程序在一個(gè)代碼段內(nèi)調(diào)用時(shí)不修改CS的值,只修改IP的值段間調(diào)用子程序跟主程序不在一個(gè)代碼段內(nèi)調(diào)用時(shí)都要修改CS的值和IP的值NEARFAR調(diào)用的子程序執(zhí)行完畢,用返回指令返回到主程序中。返回指令的操作碼是ret。是子程序的最后一條指令。它表示從當(dāng)前的子程序返回到調(diào)用這個(gè)子程序的主程序中。它實(shí)質(zhì)上執(zhí)行的功能,是將主程序的斷點(diǎn)從堆棧中彈出到ip或CS和IP中,以到達(dá)主程序的正確位置開始執(zhí)行返回指令操作碼:RET子程序最后一條語句從當(dāng)前子程序返回到調(diào)用程序?qū)⒅鞒绦虻臄帱c(diǎn)從堆棧中彈出到IP或CS和IP中,以到達(dá)主程序的正確位置開始執(zhí)行前面提到,近過程調(diào)用是段內(nèi)調(diào)用,只修改IP的值,所以,返回的時(shí)候從堆棧中彈出IP的值即可遠(yuǎn)過程調(diào)用是段間調(diào)用,既修改cs又修改ip,所以返回的時(shí)候從堆棧中彈出IP和cs的值返回指令近過程返回段內(nèi)調(diào)用子程序跟主程序在一個(gè)代碼段內(nèi)調(diào)用時(shí)不修改CS的值,只修改IP的值段間調(diào)用子程序跟主程序不在一個(gè)代碼段內(nèi)調(diào)用時(shí)都要修改CS的值和IP的值NEARFARIP遠(yuǎn)過程返回IPCS首先來看一下段內(nèi)調(diào)用。段內(nèi)調(diào)用分段內(nèi)直接調(diào)用和段內(nèi)間接調(diào)用。它們的區(qū)別是子程序符號(hào)地址是否顯示在指令中。這里的PROC就是一個(gè)符號(hào)地址,它表示要調(diào)用的子程序所在的位置,段內(nèi)調(diào)用段內(nèi)直接調(diào)用段內(nèi)間接調(diào)用CALLBXCALLNEARPROC區(qū)別:子程序符號(hào)地址是否顯示在指令中符號(hào)地址CALLNEARPROC要調(diào)用的子程序所在位置因?yàn)槭嵌蝺?nèi)調(diào)用,所以只需要修改IP的值。段內(nèi)調(diào)用段內(nèi)直接調(diào)用段內(nèi)間接調(diào)用CALLBXCALLNEARPROC區(qū)別:子程序符號(hào)地址是否顯示在指令中修改IP的值那么程序在調(diào)用前先將斷點(diǎn)的IP值壓入到堆棧中。斷點(diǎn)就是主程序中待執(zhí)行的下一條指令,然后根據(jù)PROC指示的位置,計(jì)算出IP的位移量,在IP的基礎(chǔ)上加上這個(gè)位移量,讓IP指向PROC的位置斷點(diǎn)主程序中待執(zhí)行的下一條指令[SP]-2→[SP],[IP]→[SP+1],[SP]PROC指示IP的位移量[IP]+DISP→[IP]段內(nèi)間接調(diào)用的意思是子程序的符號(hào)地址沒有顯示在指令中,而是保存在寄存器或者存儲(chǔ)器的單元中。因?yàn)镮P是16位的數(shù),所以用一個(gè)寄存器或者兩個(gè)連續(xù)的內(nèi)存單元就可以保存。段內(nèi)調(diào)用段內(nèi)直接調(diào)用段內(nèi)間接調(diào)用CALLBXCALLNEARPROC子程序的符號(hào)地址沒有顯示在指令中,是保存在寄存器或者存儲(chǔ)器的單元中因?yàn)镮P是16位的數(shù),所以用一個(gè)寄存器或者兩個(gè)連續(xù)的內(nèi)存單元就可以保存。16位的數(shù)IP一個(gè)寄存器或兩個(gè)連續(xù)的內(nèi)存單元保存例如,段內(nèi)間接調(diào)用指令是CALLBX,段內(nèi)調(diào)用段內(nèi)直接調(diào)用段內(nèi)間接調(diào)用CALLBXCALLNEARPROCCALLBX那么子程序的入口地址存放在bx中,程序會(huì)先斷點(diǎn)的ip值壓入到堆棧中,然后用bx的值修改IP的值子程序的入口地址[BX]→IP下一條指令的偏移地址入棧:[SP]-2→SP,[IP]→[SP+1],[SP]BX修改IP值:[BX]→IP段內(nèi)間接調(diào)用CALLBXCALLBX再看下一條指令Callwordptr[bx],這條指令將子程序的入口地址存放在bx指示的兩個(gè)連續(xù)的內(nèi)存單元中,程序依然是先將斷點(diǎn)的IP地址壓入堆棧中。然后從bx指示的兩

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論