歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

子程序的調(diào)用

  • 資源ID:248191544       資源大?。?span id="cymd5td" class="font-tahoma">146KB        全文頁(yè)數(shù):46頁(yè)
  • 資源格式: PPT        下載積分:15積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

子程序的調(diào)用

,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,子程序的調(diào)用,子程序的結(jié)構(gòu),子程序的定義,子程序的調(diào)用與返回指令,子程序的編程原則,參數(shù)的傳遞,子程序的定義,1.,基本概念,功能相對(duì)獨(dú)立的一段程序,.,輸入,輸出,處理過(guò)程均可編寫(xiě)為相應(yīng)的子程序,.,使程序的模塊化,便于代碼復(fù)用、簡(jiǎn)化編程。,2.,子程序的定義,過(guò)程定義偽指令,過(guò)程名,PROC NEAR/FAR,;,過(guò)程的開(kāi)始,,FAR,、,NEAR,過(guò)程的屬性,過(guò)程體,RET,過(guò)程名,ENDP,;,過(guò)程結(jié)束,3.,注意問(wèn)題,1),過(guò)程體內(nèi)必須有一條,RET,指令被執(zhí)行,proc1 proc,mov,ax,0,proc1,endp,proc2 proc,mov,bx,-1,ret,proc,endp,子程序的定義,2),調(diào)用程序和過(guò)程在同一程序段時(shí),屬性選擇,NEAR,當(dāng)調(diào)用程序和過(guò)程不在同一程序段時(shí),應(yīng)選擇,FAR,3),在調(diào)用時(shí),NEAR,和,FAR,可以強(qiáng)制改變,CALL FAR PTR NEARPROC,CALL NEAR PTR FARPROC,子程序的定義,子過(guò)程的調(diào)用與返回指令,子過(guò)程的調(diào)用是個(gè)”有去有回”的過(guò)程,子程序執(zhí)行完后必須返回,CALL,指令的下一條指令處,因此必須對(duì),CALL,指令的下條指令的地址進(jìn)行保存,.,保存地址的操作是通過(guò)堆棧來(lái)完成,.,不是采用,PUSH POP,指令來(lái)實(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)用,子過(guò)程的調(diào)用與返回指令,1,)段內(nèi)直接調(diào)用,SP=SP-2,;,SS,:,SP CALL,下一條指令的,IP,IP=IP+D16,(,DST,為,16,位),2,)段內(nèi)間接調(diào)用,SP=SP-2,;,SS,:,SP CALL,下一條指令的,IP,IP=DST,中的有效地址,EA,(,DST,為,16,位),子過(guò)程的調(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,位,子過(guò)程的調(diào)用與返回指令,例題:判斷下列,CALL,指令的尋址方式,:,1,),PRO1,為過(guò)程名,屬性為,NEAR,CALL PRO1,2,),PRO2,為過(guò)程名,屬性為,FAR,CALL PRO2,3,),設(shè)過(guò)程的偏移地址在,BX,中,則有指令:,CALL BX,4,),設(shè)過(guò)程的偏移地址在,BX,中,則有指令:,CALL BX,子過(guò)程的調(diào)用與返回指令,5,)設(shè)過(guò)程地址在數(shù)據(jù)段,addi,所指的單元中,則有,指令:,CALL DWORD PTR,addi,6),設(shè)過(guò)程地址在,BX,中,則有指令:,CALL DWORD PTR BX,子過(guò)程的調(diào)用與返回指令,2.,子程序的返回指令,指令格式:,RET/RET N/RETF,指令功能:,RET,:,返回地址出棧,IP,(,段內(nèi)),RETF,:,返回地址出棧,IP,(,段內(nèi) 段間)和,CS,寄存器(段間),RET N,:,返回地址出棧,IP,(,段內(nèi) 段間)和,CS,寄存器(段間),再將,N,個(gè)(必須是偶數(shù))字節(jié)數(shù)據(jù)彈出來(lái),保持棧,的平衡。,子過(guò)程的調(diào)用與返回指令,3.,注意,:,1)CALL,和,RET,均不影響標(biāo)志,2)NEAR,屬性的過(guò)程,RET,是段內(nèi)返回,匯編后仍為,RET,;,如果是,FAR,屬性的過(guò)程,RET,是段間返回,匯編后,RET,為,RETF.,3),段內(nèi)調(diào)用返回只需設(shè)置,IP,4),段間調(diào)用返回需設(shè)置,IP,和,CS,多模塊采用此設(shè)計(jì)方法,子過(guò)程的調(diào)用與返回指令,4.,子程序調(diào)用方式舉例,分析下面程序段,說(shuō)明各種調(diào)用子程序的方法和尋址方式,:,data segment,nproc,dw,nearp,fproc,dd,farp,data ends,code1 segment,assume cs:code1,cs:data,Main proc far,子過(guò)程的調(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,lea,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)行模塊分解,畫(huà)出流程圖,.,2.,對(duì)子程序做說(shuō)明,.,說(shuō)明內(nèi)容,:,子程序名,功能,入口參數(shù),出口參數(shù),執(zhí)行時(shí)間等,3.,主程序中的寄存器信息內(nèi)容的保存和恢復(fù),主程序調(diào)用和返回時(shí)斷點(diǎn)信息的保存和恢復(fù),4.,注意堆棧的使用,.,壓入與彈出的內(nèi)容必須對(duì)應(yīng),.,1.,切分子程序,根據(jù)程序的功能、結(jié)構(gòu)和重復(fù)使用的程序段等特性完成子程序的切分。,1,)顯示一個(gè)字符的子程序,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),通過(guò)鍵盤獲取一個(gè)字符的子程序,inputchar,proc,push ax,mov,ah,1,int,21h,mov,char,al,pop ax,ret,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.,保存環(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ù),由子程序來(lái)對(duì)這些參數(shù)完成特定功能處理;當(dāng)子程序處理后,需要向調(diào)用它的主程序傳遞結(jié)果。這種主程序和子程序之間的信息的傳遞稱為參數(shù)的傳遞。,向子程序傳遞的參數(shù)稱為子程序的入口參數(shù),子程序向調(diào)用它的程序傳遞的參數(shù)為子程序的出口參數(shù)。編程時(shí)必須確定要處理數(shù)據(jù)和返回結(jié)果是采用何種方式來(lái)實(shí)現(xiàn)參數(shù)傳遞。參數(shù)傳遞方式有四種:寄存器、存儲(chǔ)器、地址表、堆棧。,2,參數(shù)傳遞方法:,寄存器傳遞參數(shù),存儲(chǔ)器傳遞參數(shù),地址表傳遞變量地址,堆棧傳遞參數(shù),參數(shù)的傳遞,寄存器傳遞參數(shù),傳遞數(shù)據(jù)和地址。常用,AL,,,AX,,,DX,傳遞數(shù)據(jù),,SI,,,DI,,,BX,傳遞地址,用于入口參數(shù)較少的情況,舉例:求帶符號(hào)的字?jǐn)?shù)組,ARRAY,的元素的最大值,元素的個(gè)數(shù)由變量,COUNT,定義,最大值放在,MAX,中,(,1,)分析:,定義一個(gè)查找最大值的子程序,FINDMAX,,,通過(guò)主程序調(diào)用程序。,子程序的功能:將帶符號(hào)的字?jǐn)?shù)組,ARRAY,的首地址送寄存器,SI,。,元素的個(gè)數(shù),COUNT,送寄存器,CX,。,調(diào)用后,,AX,中結(jié)果送,MAX,中。,參數(shù)的傳遞,(2),流程圖,主程序,初始化,DS,數(shù)組首地址送,SI,數(shù)組個(gè)數(shù)送,CX,調(diào)用子程序,FINDMAX,找出數(shù)組的最大值,最大值送,MAX,END,子程序開(kāi)始,保護(hù)現(xiàn)場(chǎng),設(shè)置地址指針,取第一個(gè)數(shù)如,AX,AX,與下一數(shù)比較,AX,大嗎,?,修改地址,CX=CX-1,CX=0?,恢復(fù)現(xiàn)場(chǎng),子程序結(jié)束,數(shù)據(jù)交換,Y,N,N,Y,DATA SEGMENT,count,dw,5,Array,dw,-1,8,9,-2,4,Max,dw,?,Data ends,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,從鍵盤輸入一個(gè)十進(jìn)制數(shù),(065535),將它轉(zhuǎn)換成,16,進(jìn)制輸出,.,分析,1),該程序定義三個(gè)子程序,子程序,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ù)的傳遞,主程序流程圖,開(kāi)始,調(diào)用子程序,DECBIN,從鍵盤,接受一個(gè)十進(jìn)制并轉(zhuǎn)化為對(duì)應(yīng)的二進(jìn)制,調(diào)用子程序,CRLF,實(shí)現(xiàn)回車換行,調(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

注意事項(xiàng)

本文(子程序的調(diào)用)為本站會(huì)員(dfg****19)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




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

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

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


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