子程序的調(diào)用

上傳人:dfg****19 文檔編號:248191544 上傳時(shí)間:2024-10-22 格式:PPT 頁數(shù):46 大小:146KB
收藏 版權(quán)申訴 舉報(bào) 下載
子程序的調(diào)用_第1頁
第1頁 / 共46頁
子程序的調(diào)用_第2頁
第2頁 / 共46頁
子程序的調(diào)用_第3頁
第3頁 / 共46頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《子程序的調(diào)用》由會員分享,可在線閱讀,更多相關(guān)《子程序的調(diào)用(46頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,子程序的調(diào)用,子程序的結(jié)構(gòu),子程序的定義,子程序的調(diào)用與返回指令,子程序的編程原則,參數(shù)的傳遞,子程序的定義,1.,基本概念,功能相對獨(dú)立的一段程序,.,輸入,輸出,處理過程均可編寫為相應(yīng)的子程序,.,使程序的模塊化,便于代碼復(fù)用、簡化編程。,2.,子程序的定義,過程定義偽指令,過程名,PROC NEAR/FAR,;,過程的開始,,FAR,、,NEAR,過程的屬性,過程體,RET,過程名,ENDP,;,過程結(jié)束,3.,注意問題,1),過程體內(nèi)必須有一條,RET,指令被執(zhí)行,proc1 proc,mov,a

2、x,0,proc1,endp,proc2 proc,mov,bx,-1,ret,proc,endp,子程序的定義,2),調(diào)用程序和過程在同一程序段時(shí),屬性選擇,NEAR,當(dāng)調(diào)用程序和過程不在同一程序段時(shí),應(yīng)選擇,FAR,3),在調(diào)用時(shí),NEAR,和,FAR,可以強(qiáng)制改變,CALL FAR PTR NEARPROC,CALL NEAR PTR FARPROC,子程序的定義,子過程的調(diào)用與返回指令,子過程的調(diào)用是個”有去有回”的過程,子程序執(zhí)行完后必須返回,CALL,指令的下一條指令處,因此必須對,CALL,指令的下條指令的地址進(jìn)行保存,.,保存地址的操作是通過堆棧來完成,.,不是采用,PUSH

3、POP,指令來實(shí)現(xiàn),而是用,CALLRET,指令隱含完成,.,1.,子程序的調(diào)用指令,指令格式,:,CALL DST,DST,是子程序的子程序名或子程序的首地址,.,可以采用與轉(zhuǎn)移指令有關(guān)的四種轉(zhuǎn)移的尋址方式之一,即,:,段內(nèi)直接調(diào)用,段內(nèi)間接調(diào)用,段間直接調(diào)用,段間間接調(diào)用,.,段內(nèi)、段間:調(diào)用程序和子程序在同一段內(nèi),為段內(nèi)調(diào),用;否則 段間調(diào)用;,直接、間接:,DST,為子程序名(子程序首地址),是轉(zhuǎn)移,地址,該有效地址直接出現(xiàn)在,CALL,指中;,若有效地址出現(xiàn)在寄存器中間接得到,則為間,接調(diào)用,子過程的調(diào)用與返回指令,1,)段內(nèi)直接調(diào)用,SP=SP-2,;,SS,:,SP CALL,下

4、一條指令的,IP,IP=IP+D16,(,DST,為,16,位),2,)段內(nèi)間接調(diào)用,SP=SP-2,;,SS,:,SP CALL,下一條指令的,IP,IP=DST,中的有效地址,EA,(,DST,為,16,位),子過程的調(diào)用與返回指令,3,)段間直接調(diào)用,SP=SP-2,;,SS,:,SP,返回地址的段地址,SP=SP-2,;,SS,:,SP,返回地址的偏移值,IP=DST,的偏移地址,CS=DST,的段地址,4,)段間間接調(diào)用,SP=SP-2,;,SS,:,SP,返回地址的段地址,SP=SP-2,;,SS,:,SP,返回地址的偏移值,IP=EA,的低,16,位,CS=EA,的高,16,位,

5、子過程的調(diào)用與返回指令,例題:判斷下列,CALL,指令的尋址方式,:,1,),PRO1,為過程名,屬性為,NEAR,CALL PRO1,2,),PRO2,為過程名,屬性為,FAR,CALL PRO2,3,),設(shè)過程的偏移地址在,BX,中,則有指令:,CALL BX,4,),設(shè)過程的偏移地址在,BX,中,則有指令:,CALL BX,子過程的調(diào)用與返回指令,5,)設(shè)過程地址在數(shù)據(jù)段,addi,所指的單元中,則有,指令:,CALL DWORD PTR,addi,6),設(shè)過程地址在,BX,中,則有指令:,CALL DWORD PTR BX,子過程的調(diào)用與返回指令,2.,子程序的返回指令,指令格式:,R

6、ET/RET N/RETF,指令功能:,RET,:,返回地址出棧,IP,(,段內(nèi)),RETF,:,返回地址出棧,IP,(,段內(nèi) 段間)和,CS,寄存器(段間),RET N,:,返回地址出棧,IP,(,段內(nèi) 段間)和,CS,寄存器(段間),再將,N,個(必須是偶數(shù))字節(jié)數(shù)據(jù)彈出來,保持棧,的平衡。,子過程的調(diào)用與返回指令,3.,注意,:,1)CALL,和,RET,均不影響標(biāo)志,2)NEAR,屬性的過程,RET,是段內(nèi)返回,匯編后仍為,RET,;,如果是,FAR,屬性的過程,RET,是段間返回,匯編后,RET,為,RETF.,3),段內(nèi)調(diào)用返回只需設(shè)置,IP,4),段間調(diào)用返回需設(shè)置,IP,和,C

7、S,多模塊采用此設(shè)計(jì)方法,子過程的調(diào)用與返回指令,4.,子程序調(diào)用方式舉例,分析下面程序段,說明各種調(diào)用子程序的方法和尋址方式,:,data segment,nproc,dw,nearp,fproc,dd,farp,data ends,code1 segment,assume cs:code1,cs:data,Main proc far,子過程的調(diào)用與返回指令,mov,ax,data,mov,ds,ax,call,nearp,lea,ax,nearp,call ax,call,nproc,lea,bx,nproc,call word,ptr,bx,call,farp,call,fproc,le

8、a,bx,fproc,call,dword,ptr,bx,mov,ah,4ch,int,21h,Main,endp,Nearp,proc near,ret,Nearp endp,Code1 ends,end main,code2 segment,assume,cs,:code2,Farp,proc far,.,ret,Farp,ends,Code2 ends,子程序的編程原則,1.,分析題意,進(jìn)行模塊分解,畫出流程圖,.,2.,對子程序做說明,.,說明內(nèi)容,:,子程序名,功能,入口參數(shù),出口參數(shù),執(zhí)行時(shí)間等,3.,主程序中的寄存器信息內(nèi)容的保存和恢復(fù),主程序調(diào)用和返回時(shí)斷點(diǎn)信息的保存和恢復(fù),4

9、.,注意堆棧的使用,.,壓入與彈出的內(nèi)容必須對應(yīng),.,1.,切分子程序,根據(jù)程序的功能、結(jié)構(gòu)和重復(fù)使用的程序段等特性完成子程序的切分。,1,)顯示一個字符的子程序,display proc,push ax,mov,ah,2,int,21h,pop ax,ret,displsy,endp,子程序的編程原則,在主程序中調(diào)用子程序,mov,dl,a,call display,mov,dl,0dh,call display,.,子程序的編程原則,2),通過鍵盤獲取一個字符的子程序,inputchar,proc,push ax,mov,ah,1,int,21h,mov,char,al,pop ax,re

10、t,intputchar,endp,子程序的編程原則,3),顯示回車換行子程序,dispodoa,proc,push ax,push,dx,mov,ah,2h,mov,dl,0dh,int,21h,mov,ah,2h,mov,dl,0ah,int,21h,Pop,dx,Pop ax,Ret,Dis0doa,endp,子程序的編程原則,2.,確定接口參數(shù)及參數(shù)傳遞方法,入口參數(shù):把子程序執(zhí)行前準(zhǔn)備的值或地址稱為入口參數(shù)。是調(diào)用者提供給子程序的信息。,出口參數(shù):把子程序返回值或地址稱為出口參數(shù)。是子程序運(yùn)行后,返回調(diào)用者的信息。,保存入口參數(shù)和出口參數(shù)的方法:利用堆?;蚣拇嫫?子程序的編程原則,3

11、.,保存環(huán)境信息,子程序是可共享的,可被不同的程序調(diào)用,.,所以子程序中用到的寄存器的內(nèi)容要保存,在子程序退出前要恢復(fù)寄存器中的內(nèi)容,.,4.,堆棧平衡,堆棧使用主要在:保存轉(zhuǎn)移指令的返回?cái)帱c(diǎn)、保存子程序中用到的寄存器的內(nèi)容、參數(shù)傳遞和子程序本身用到的堆棧操作。保存堆棧平衡確保數(shù)據(jù)彈出的準(zhǔn)確性,使程序正確執(zhí)行。,子程序的編程原則,參數(shù)的傳遞,1,參數(shù)傳遞:,當(dāng)子程序被調(diào)用時(shí),一般需要向子程序傳遞若干參數(shù),由子程序來對這些參數(shù)完成特定功能處理;當(dāng)子程序處理后,需要向調(diào)用它的主程序傳遞結(jié)果。這種主程序和子程序之間的信息的傳遞稱為參數(shù)的傳遞。,向子程序傳遞的參數(shù)稱為子程序的入口參數(shù),子程序向調(diào)用它的

12、程序傳遞的參數(shù)為子程序的出口參數(shù)。編程時(shí)必須確定要處理數(shù)據(jù)和返回結(jié)果是采用何種方式來實(shí)現(xiàn)參數(shù)傳遞。參數(shù)傳遞方式有四種:寄存器、存儲器、地址表、堆棧。,2,參數(shù)傳遞方法:,寄存器傳遞參數(shù),存儲器傳遞參數(shù),地址表傳遞變量地址,堆棧傳遞參數(shù),參數(shù)的傳遞,寄存器傳遞參數(shù),傳遞數(shù)據(jù)和地址。常用,AL,,,AX,,,DX,傳遞數(shù)據(jù),,SI,,,DI,,,BX,傳遞地址,用于入口參數(shù)較少的情況,舉例:求帶符號的字?jǐn)?shù)組,ARRAY,的元素的最大值,元素的個數(shù)由變量,COUNT,定義,最大值放在,MAX,中,(,1,)分析:,定義一個查找最大值的子程序,FINDMAX,,,通過主程序調(diào)用程序。,子程序的功能:將

13、帶符號的字?jǐn)?shù)組,ARRAY,的首地址送寄存器,SI,。,元素的個數(shù),COUNT,送寄存器,CX,。,調(diào)用后,,AX,中結(jié)果送,MAX,中。,參數(shù)的傳遞,(2),流程圖,主程序,初始化,DS,數(shù)組首地址送,SI,數(shù)組個數(shù)送,CX,調(diào)用子程序,FINDMAX,找出數(shù)組的最大值,最大值送,MAX,END,子程序開始,保護(hù)現(xiàn)場,設(shè)置地址指針,取第一個數(shù)如,AX,AX,與下一數(shù)比較,AX,大嗎,?,修改地址,CX=CX-1,CX=0?,恢復(fù)現(xiàn)場,子程序結(jié)束,數(shù)據(jù)交換,Y,N,N,Y,DATA SEGMENT,count,dw,5,Array,dw,-1,8,9,-2,4,Max,dw,?,Data en

14、ds,Code segment,assume,cs:code,ds:data,Main proc far,mov,ax,data,mov,ds,ax,lea,si,array,mov,cx,count,dec,cx,call,findmax,mov,max,ax,mov,ah,4ch,int,21h,Main,endp,Findmax proc,mov ax,si,Lp1:cmp ax,si+2,jg next,xchg ax,si+2,next:add si,2,loop lp1,ret,findmax endp,Code ends,end main,舉例,2,從鍵盤輸入一個十進(jìn)制數(shù),(06

15、5535),將它轉(zhuǎn)換成,16,進(jìn)制輸出,.,分析,1),該程序定義三個子程序,子程序,DECBIN,功能,:,從鍵盤輸入的十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)放在,BX,中,子程序,CRLF,完成回車換行的功能,子程序,BINHEX,功能,:,二進(jìn)制轉(zhuǎn)換成,16,進(jìn)制,.,2),該程序采用寄存器傳送參數(shù),3),在,DECBIN,子程序中,當(dāng)鍵入”*”時(shí),將寄存器,SI,設(shè)置,1,然后退出該子程序,繼續(xù)執(zhí)行其它子程序,最后判斷,SI,的值是否為,1,為,1,則結(jié)束,否則執(zhí)行循環(huán),.,參數(shù)的傳遞,主程序流程圖,開始,調(diào)用子程序,DECBIN,從鍵盤,接受一個十進(jìn)制并轉(zhuǎn)化為對應(yīng)的二進(jìn)制,調(diào)用子程序,CRLF,實(shí)現(xiàn)

16、回車換行,調(diào)用子程序,BINHEX,把二進(jìn)制數(shù)轉(zhuǎn)換成,16,進(jìn)制并顯示,調(diào)用子程序,CRLF,實(shí)現(xiàn)回車換行,是否退出,接收下一次鍵盤輸入,END,Y,N,decbin,PROC NEAR,push ax,push,cx,mov,bx,0,mov,si,0,Newchar,:,mov,ah,1,int,21h,cmp,al,*,je,ext1,sub al,30h,jl,ext2,cmp,al,9,jg,ext2,cbw,xchg,ax,bx,mov,cx,10,mul,cx,xchg,ax,bx,add,ax,bx,jmp,newchar,xchg,ax,bx,add,ax,bx,jmp,newchar,Ext1:,mov,si,1,Ext2:pop,cx,pop ax,ret,Decbin,endp,Binhex,proc near,push,cx,push,dx,mov,ch,4,Lp,:,mov,cl,4,rol,bx,cl,mov,al,bl,and al,0fh,add al,30h,cmp,al,3ah,jl,print,add al,7h,print:,mov,dl,al

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

相關(guān)資源

更多
正為您匹配相似的精品文檔

相關(guān)搜索

關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!