版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、2021-12-301本章重點介紹子程序的調(diào)用與返回指令、子程序調(diào)用時參數(shù)傳遞方法和子程序的設(shè)計方法。docin/sundae_meng2l子程序又叫過程,相當(dāng)與高級語言的過程和函數(shù)。l子程序結(jié)構(gòu)是模塊化程序設(shè)計的基礎(chǔ)。l構(gòu)造: procname PROC Attributel .l procname ENDP lAttribute為NEAR段內(nèi)調(diào)用)l FAR段間調(diào)用)34l1.子程序的調(diào)用和返回子程序的調(diào)用和返回P140l calll 格式:格式:CALL 目標(biāo)地址目標(biāo)地址l 功能:暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行功能:暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行相應(yīng)的子程序,目標(biāo)地址給出調(diào)用于程相應(yīng)的子程序
2、,目標(biāo)地址給出調(diào)用于程序的入口地址。序的入口地址。l 在子程序執(zhí)行完后,由子程序中的在子程序執(zhí)行完后,由子程序中的RET指令返回至指令返回至CALL指令的下一條指令繼指令的下一條指令繼續(xù)執(zhí)行。為此,續(xù)執(zhí)行。為此,CALL指令同時需要把指令同時需要把斷點地址斷點地址(即即CALL指令的下指令的下條指令的條指令的CS和和IP)入棧保護入棧保護lCALL指令不影響標(biāo)志位,但應(yīng)特別注指令不影響標(biāo)志位,但應(yīng)特別注意在于程序中對相關(guān)寄存器的保護。意在于程序中對相關(guān)寄存器的保護。lCALL指令實質(zhì)上是一條特殊的、帶返指令實質(zhì)上是一條特殊的、帶返回的無條件轉(zhuǎn)移指令?;氐臒o條件轉(zhuǎn)移指令。 5CALL指令目標(biāo)地址
3、的形成方式與JMP指令完全類似,即有段內(nèi)直接調(diào)用、段內(nèi)間接調(diào)用、段間直接調(diào)用與段間間接調(diào)用四種方式。直接調(diào)用其目標(biāo)地址直接出現(xiàn)在CALL指令中,間接調(diào)用其目標(biāo)地址存放在指令所指向的寄存器或內(nèi)存單元中。6格式:格式:CALL NEAR PTR 標(biāo)號標(biāo)號功能:首先將斷點的功能:首先將斷點的IP值壓入推棧,再將從指令中值壓入推棧,再將從指令中得到的子程序相對偏移量加到得到的子程序相對偏移量加到IP,然后根據(jù),然后根據(jù)IP轉(zhuǎn)轉(zhuǎn)相應(yīng)子程序執(zhí)行。相應(yīng)子程序執(zhí)行。如:如:CALL OUTPUT ;段內(nèi)直接調(diào)用子程序段內(nèi)直接調(diào)用子程序output7格式:格式:CALL REG|MEM功能:首先將斷點的功能:首
4、先將斷點的IP值壓入堆棧,再將值壓入堆棧,再將子程序的地址偏移量送入子程序的地址偏移量送入IP,然后根據(jù),然后根據(jù)IP轉(zhuǎn)相應(yīng)子程序執(zhí)行。子程序的地址偏轉(zhuǎn)相應(yīng)子程序執(zhí)行。子程序的地址偏移量為指令中指定的移量為指令中指定的16位通用寄存器或位通用寄存器或存儲單元值。存儲單元值。 如:如:CALL BX CALL WORD PTR BX8格式:格式:CALL FAR PTR 標(biāo)號標(biāo)號功能:首先把斷點的功能:首先把斷點的CS值壓入堆棧,并將于程序的值壓入堆棧,并將于程序的段地址送入段地址送入CS再把斷點的再把斷點的IP值壓入堆棧,把子程值壓入堆棧,把子程序的地址偏移量送入序的地址偏移量送入IP。然后根
5、據(jù)。然后根據(jù)CS:IP轉(zhuǎn)相應(yīng)轉(zhuǎn)相應(yīng)于程序執(zhí)行。于程序執(zhí)行。如:如:CALL FAR PTR OUTPUT;段間直接調(diào)用子程序段間直接調(diào)用子程序OUTPUT 9格式:格式:CALL DWORD PTR MEM功能:首先把斷點的功能:首先把斷點的CS壓入堆棧,并將壓入堆棧,并將指令中指定的雙字存儲器的第二個字的指令中指定的雙字存儲器的第二個字的內(nèi)容送入內(nèi)容送入CS;再把斷點的;再把斷點的IP壓入堆棧,壓入堆棧,再將雙字指針的第一個字的內(nèi)容送入再將雙字指針的第一個字的內(nèi)容送入IP。然后根據(jù)然后根據(jù)CS:IP轉(zhuǎn)相應(yīng)子程序執(zhí)行。轉(zhuǎn)相應(yīng)子程序執(zhí)行。 如:如:CALL DWORD PTR BX CALL D
6、WROD PTR MEM3210返回指令RET通常作為一個子程序的最后一條指令,用以返回到調(diào)用這個于程序的主程序斷點處繼續(xù)執(zhí)行。與調(diào)用指令相對應(yīng),返回指令RET也有段內(nèi)返回與段間返回兩種形式。是段內(nèi)返回,還是段間返回,匯編程序能自動確定,并形成相應(yīng)的返回指令。返回指令有兩種格式:11格式一:RET 格式一為不帶偏移量的返回。若是段內(nèi)的RET指令(機器碼為C3HC2H),只返回主程序斷點處的IP值。即從堆棧彈出一個字送入IP,且SP加2。然后返回CS:IP處繼續(xù)執(zhí)行程序。此時的返回也稱近返回。若為段間的RET指令(機器碼為CBHCAH),則要返回主程序斷點處的段地址和IP值。將從堆棧彈出一個字送
7、CS, SP+2SP,再從堆棧彈出一個字送Cs,同時SP加2。然后返回CS:IP處繼續(xù)執(zhí)行程序。此時RET也稱遠(yuǎn)返回。12格式二:RET n格式二為帶偏移量的返回,與格式一完全類似,只是在修改堆棧指針時需增加SPSP+n處理。n一般為偶數(shù),格式二適合主程序向于程序利用堆棧傳遞參數(shù)的情況。在利用堆棧傳遞參數(shù)時,主程序先將參數(shù)壓入堆棧,在于程序中將參數(shù)取出,為找到正確的返回地址,保持堆棧平衡,應(yīng)將堆棧指針修正。 返回指令RET對標(biāo)志位無影響。13l用展轉(zhuǎn)相除法 在我們編程中用的最多方法就是展轉(zhuǎn)相除法了,展轉(zhuǎn)相除法是古希臘求兩個正整數(shù)的最大公約數(shù)的也叫歐幾里德算法,用較大的數(shù)除以較小的數(shù),結(jié)果的余數(shù)
8、和被除數(shù)構(gòu)成新的一對數(shù),繼續(xù)做上面的除法,直到大數(shù)被小數(shù)求盡 。14GYSPROC PUSHAX PUSHBX PUSHDXG1:XOR DX,DX DIVBX CMP DX,0 JZEXIT MOV AX,BX MOV BX,DX JMPG1EXIT: MOV CX,BX POPDX POPBX POPAX RETGYSENDP15 調(diào)用程序和子程序之間的信息傳送叫參數(shù)傳送。a.通過寄存器傳送參數(shù)約定寄存器法) P104 例1:十進制到十六進制數(shù)的轉(zhuǎn)換(BX)。流程圖 開場調(diào)用DECIBIN調(diào)用crlf調(diào)用binihex調(diào)用CRLF完畢從鍵盤取得十進制數(shù),保存在BX中顯示回車和換行用十六進制
9、形式顯示BX中的數(shù)16;從鍵盤輸入十進制數(shù),然后按十六進制顯示DATA SEGMENTDATA ENDS ;同學(xué)們掌握各段的結(jié)構(gòu)STACK SEGMENT PARA STACK STACK DB 100H DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ;分配段址,但不會給段寄存器付值17START: MOV AX,DATA MOV DS,AX ;給段寄存器DS付值 call DECIBIN call binihex;子程序調(diào)用 call crlf MOV AH,4CH INT 21H ;主程序的返回方式一(DOS功能調(diào)
10、用返回)18DECIBIN proc near push ax push cx pushf mov bx,0newchar: mov ah,1 ;鍵盤輸入 int 21h sub al,30h jl exit ; 9退出 cbw xchg ax,bx mov cx,10 mul cx xchg ax,bx add bx,ax jmp newchar exit: popf pop cx pop ax ret DECIBIN endp19binihex proc near push ax push cx push dx pushf mov ch,4rotate: mov cl,4 rol bx,c
11、l mov al,bl and al,0fh add al,30h ; 09 cmp al,3ah jl printit add al,7h ; AFprintit: mov dl,al mov ah,2 int 21h dec ch jnz rotate mov dl,H mov ah,2 int 21h popf pop dx pop cx pop ax retbinihex endp20crlf PROC NEAR push ax push dx pushf mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h popf pop
12、dx pop ax retcrlf ENDPCODE ENDS END START21lb.如果過程和調(diào)用程序在同一模塊中,則過程可直接訪問模塊中的變量。(約定變量法)lData segmentl ary dw 100 dup(?)l count dw 100l sum dw ? lData endslcode segment l main proc farl assume cs:code ,ds:datal start: push dsl sub ax,axl push axl mov ax,datal mov ds,ax 22l l call near ptr proaddl l ret
13、lmain endplProadd proc nearl push axl .lProadd endplCode endsl end start23lc.通過地址表傳送參數(shù)地址約定存儲器法)l 建立一個地址表,把要傳送的參數(shù)存在地址表中,然后把地址表的首地址通過寄存器BX傳送到子程序。l mov table,offset numl mov table+2,offset nl mov table+4, offset totall mov bx,offset tablel call proadd24ld.通過堆棧傳送參數(shù)或參數(shù)地址堆棧法)l 采用在主程序里把參數(shù)地址保存到堆棧中,在子程序里從堆棧中
14、取出參數(shù)以達到傳送參數(shù)的目的。l 注:用BP保存原來的SP的值,以便取得堆棧中的地址.25le.多個模塊之間的參數(shù)傳送問題l (1)外部符號l PUBLIC symbol,l 在一個模塊中定義的符號在提供給其他模塊使用時,必須用PUBLIC定義.l EXTRN symbol name:type,l 在另一模塊中定義而在本模塊中使用的符號必須用EXTERN偽操作。如符號為變量,則類型為BYTE/WORD/DWORD;如符號為標(biāo)號或過程名,則類型為NEAR/FAR26P153主程序CALL PROC-A子程序AProc_aCall proc_bret子程序BProc-bret27子程序的代碼部分通常有如下結(jié)構(gòu): (1)保護現(xiàn)場: (2)根據(jù)入口參數(shù),獲取要處理的數(shù)據(jù); (3)進行數(shù)據(jù)的加工處理; (4)根據(jù)出口參數(shù),將處理后的數(shù)據(jù)送至指定區(qū)域; (5)恢復(fù)現(xiàn)場; (6)返回主程序。28子程序中往往還包含有該子程序調(diào)用的詳細(xì)說明,用以向使用考提供足夠的信息。子程序說明通常包括如下內(nèi)容: (1)子程序名稱; (2)子程序功能; (3)入口參數(shù): (4)出口參數(shù); (5)使用的寄存
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護理吸痰法操作規(guī)程
- 植樹節(jié)班會教育活動
- 內(nèi)鏡治療后患者并發(fā)癥
- 春季安全生產(chǎn)管理工作
- 3.3.1鹽類的水解原理 課件 高二上學(xué)期化學(xué)人教版(2019)選擇性必修1
- DB5323T 115-2024魔芋林下栽培技術(shù)規(guī)范
- 數(shù)據(jù)中心能源管理的可持續(xù)發(fā)展
- 高端白酒行業(yè)發(fā)展趨勢
- 糖尿病預(yù)防與治理方案
- 菜園子教案反思
- 金融風(fēng)險2024年金融風(fēng)險的防范和化解
- 大數(shù)據(jù)技術(shù)生涯發(fā)展展示
- 心智理論與自閉癥兒童
- 人教版小學(xué)數(shù)學(xué)二年級上冊《表內(nèi)乘法(一)》作業(yè)設(shè)計
- 精神科護理風(fēng)險評估防范
- 激光熔覆技術(shù)強化金屬表面
- 人工智能在教育行業(yè)中的應(yīng)用
- 《含水層系統(tǒng)識》課件
- 部編版初中語文教材新增篇目教學(xué)研究
- 2024克拉瑪依出租車資格證模擬考試
- 浙江省2022年高中物理1月學(xué)業(yè)水平考試試題
評論
0/150
提交評論