




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022-1-231本章重點(diǎn)介紹子程序的調(diào)用與返回指令、子程序調(diào)用時(shí)參數(shù)傳遞方法和子程序的設(shè)計(jì)方法。2l子程序又叫過程,相當(dāng)與高級(jí)語言的過程和函數(shù)。l子程序結(jié)構(gòu)是模塊化程序設(shè)計(jì)的基礎(chǔ)。l結(jié)構(gòu): procname PROC Attribute . procname ENDP lAttribute為NEAR(段內(nèi)調(diào)用) FAR(段間調(diào)用)34l1.子程序的調(diào)用和返回子程序的調(diào)用和返回P140l calll 格式:CALL 目標(biāo)地址l 功能:暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行相應(yīng)的子程序,目標(biāo)地址給出調(diào)用于程序的入口地址。l 在子程序執(zhí)行完后,由子程序中的RET指令返回至CALL指令的下一條指令繼續(xù)執(zhí)行。
2、為此,CALL指令同時(shí)需要把斷點(diǎn)地址(即CALL指令的下條指令的CS和IP)入棧保護(hù)lCALL指令不影響標(biāo)志位,但應(yīng)特別注意在于程序中對(duì)相關(guān)寄存器的保護(hù)。lCALL指令實(shí)質(zhì)上是一條特殊的、帶返回的無條件轉(zhuǎn)移指令。 5CALL指令目標(biāo)地址的形成方式與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)號(hào)功能功能:首先將斷點(diǎn)的IP值壓入推棧,再將從指令中得到的子程序相對(duì)偏移量加到IP,然后根據(jù)IP轉(zhuǎn)相應(yīng)子程序執(zhí)行。如:CA
3、LL OUTPUT;段內(nèi)直接調(diào)用子程序output7格式格式:CALL REG|MEM功能功能:首先將斷點(diǎn)的IP值壓入堆棧,再將子程序的地址偏移量送入IP,然后根據(jù)IP轉(zhuǎn)相應(yīng)子程序執(zhí)行。子程序的地址偏移量為指令中指定的16位通用寄存器或存儲(chǔ)單元值。 如:CALL BX CALL WORD PTR BX8格式格式:CALL FAR PTR 標(biāo)號(hào)功能:功能:首先把斷點(diǎn)的CS值壓入堆棧,并將于程序的段地址送入CS再把斷點(diǎn)的IP值壓入堆棧,把子程序的地址偏移量送入IP。然后根據(jù)CS:IP轉(zhuǎn)相應(yīng)于程序執(zhí)行。如:CALL FAR PTR OUTPUT;段間直接調(diào)用子程序OUTPUT 9格式格式:CALL
4、DWORD PTR MEM功能功能:首先把斷點(diǎn)的CS壓入堆棧,并將指令中指定的雙字存儲(chǔ)器的第二個(gè)字的內(nèi)容送入CS;再把斷點(diǎn)的IP壓入堆棧,再將雙字指針的第一個(gè)字的內(nèi)容送入IP。然后根據(jù)CS:IP轉(zhuǎn)相應(yīng)子程序執(zhí)行。 如:CALL DWORD PTR BX CALL DWROD PTR MEM3210返回指令RET通常作為一個(gè)子程序的最后一條指令,用以返回到調(diào)用這個(gè)于程序的主程序斷點(diǎn)處繼續(xù)執(zhí)行。與調(diào)用指令相對(duì)應(yīng),返回指令RET也有段內(nèi)返回與段間返回兩種形式。是段內(nèi)返回,還是段間返回,匯編程序能自動(dòng)確定,并形成相應(yīng)的返回指令。返回指令有兩種格式:11格式一:RET 格式一為不帶偏移量的返回。若是段內(nèi)
5、的RET指令(機(jī)器碼為C3HC2H),只返回主程序斷點(diǎn)處的IP值。即從堆棧彈出一個(gè)字送入IP,且SP加2。然后返回CS:IP處繼續(xù)執(zhí)行程序。此時(shí)的返回也稱近返回。若為段間的RET指令(機(jī)器碼為CBHCAH),則要返回主程序斷點(diǎn)處的段地址和IP值。將從堆棧彈出一個(gè)字送CS, SP+2SP,再?gòu)亩褩棾鲆粋€(gè)字送Cs,同時(shí)SP加2。然后返回CS:IP處繼續(xù)執(zhí)行程序。此時(shí)RET也稱遠(yuǎn)返回。12格式二:RET n格式二為帶偏移量的返回,與格式一完全類似,只是在修改堆棧指針時(shí)需增加SPSP+n處理。n一般為偶數(shù),格式二適合主程序向于程序利用堆棧傳遞參數(shù)的情況。在利用堆棧傳遞參數(shù)時(shí),主程序先將參數(shù)壓入堆棧,
6、在于程序中將參數(shù)取出,為找到正確的返回地址,保持堆棧平衡,應(yīng)將堆棧指針修正。 返回指令RET對(duì)標(biāo)志位無影響。13l用展轉(zhuǎn)相除法 在我們編程中用的最多方法就是展轉(zhuǎn)相除法了,展轉(zhuǎn)相除法是古希臘求兩個(gè)正整數(shù)的最大公約數(shù)的也叫歐幾里德算法,用較大的數(shù)除以較小的數(shù),結(jié)果的余數(shù)和被除數(shù)構(gòu)成新的一對(duì)數(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 RETGYSENDP1
7、5 調(diào)用程序和子程序之間的信息傳送叫參數(shù)傳送。la.通過寄存器傳送參數(shù)(約定寄存器法) P104 例1:十進(jìn)制到十六進(jìn)制數(shù)的轉(zhuǎn)換(BX)。流程圖 開始調(diào)用DECIBIN調(diào)用crlf調(diào)用binihex調(diào)用CRLF結(jié)束從鍵盤取得十進(jìn)制數(shù),保存在BX中顯示回車和換行用十六進(jìn)制形式顯示BX中的數(shù)16;從鍵盤輸入十進(jìn)制數(shù),然后按十六進(jìn)制顯示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 ;
8、分配段址,但不會(huì)給段寄存器付值17START: MOV AX,DATA MOV DS,AX ;給段寄存器DS付值 call DECIBIN call binihex;子程序調(diào)用 call crlf MOV AH,4CH INT 21H ;主程序的返回方式一(DOS功能調(diào)用返回)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 j
9、mp 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,cl 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 d
10、x 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 dx pop ax retcrlf ENDPCODE ENDS END START21lb.如果過程和調(diào)用程序在同一模塊中,則過程可直接訪問模塊中的變量。(約定變量法)Data segment ary dw 100 dup(?) count dw 100 sum dw ? Data endscode segment main p
11、roc far assume cs:code ,ds:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax 22l l call near ptr proaddl l ret lmain endplProadd proc nearl push axl .lProadd endplCode endsl end start23lc.通過地址表傳送參數(shù)地址(約定存儲(chǔ)器法) 建立一個(gè)地址表,把要傳送的參數(shù)存在地址表中,然后把地址表的首地址通過寄存器BX傳送到子程序。 mov table,offset num mov table+2,of
12、fset n mov table+4, offset total mov bx,offset table call proadd24ld.通過堆棧傳送參數(shù)或參數(shù)地址(堆棧法) 采用在主程序里把參數(shù)地址保存到堆棧中,在子程序里從堆棧中取出參數(shù)以達(dá)到傳送參數(shù)的目的。 注:用BP保存原來的SP的值,以便取得堆棧中的地址.25le.多個(gè)模塊之間的參數(shù)傳送問題 (1)外部符號(hào) PUBLIC symbol, 在一個(gè)模塊中定義的符號(hào)在提供給其他模塊使用時(shí),必須用PUBLIC定義. EXTRN symbol name:type, 在另一模塊中定義而在本模塊中使用的符號(hào)必須用EXTERN偽操作。如符號(hào)為變量,則
13、類型為BYTE/WORD/DWORD;如符號(hào)為標(biāo)號(hào)或過程名,則類型為NEAR/FAR26P153主程序CALL PROC-A子程序AProc_aCall proc_bret子程序BProc-bret27子程序的代碼部分通常有如下結(jié)構(gòu): (1)保護(hù)現(xiàn)場(chǎng): (2)根據(jù)入口參數(shù),獲取要處理的數(shù)據(jù); (3)進(jìn)行數(shù)據(jù)的加工處理; (4)根據(jù)出口參數(shù),將處理后的數(shù)據(jù)送至指定區(qū)域; (5)恢復(fù)現(xiàn)場(chǎng); (6)返回主程序。28子程序中往往還包含有該子程序調(diào)用的詳細(xì)說明,用以向使用考提供足夠的信息。子程序說明通常包括如下內(nèi)容: (1)子程序名稱; (2)子程序功能; (3)入口參數(shù): (4)出口參數(shù); (5)使用的寄存器和存儲(chǔ)單元: (6)調(diào)用的其他子程序; (7)子
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025市場(chǎng)營(yíng)銷承包合同
- 2025環(huán)保設(shè)備工程承包合同
- 江蘇省鹽城市東臺(tái)市第五教育聯(lián)盟2024-2025學(xué)年七年級(jí)下學(xué)期期中地理試題(含答案)
- 河南省開封市金明中學(xué)2024-2025學(xué)年八年級(jí)下學(xué)期期中考試數(shù)學(xué)試題(含部分答案)
- 二手解困房買賣合同
- 2025年山東省棗莊市市中區(qū)中考二模道德與法治試題(含答案)
- 企業(yè)法律顧問委托合同
- 婚姻終止財(cái)產(chǎn)分割正式合同
- 簡(jiǎn)易商業(yè)店鋪?zhàn)赓U合同范本
- 建筑工程通風(fēng)施工合同
- GB/T 6451-2023油浸式電力變壓器技術(shù)參數(shù)和要求
- 幼兒園中班繪本《城市里最漂亮的巨人》課件
- 醫(yī)院廉潔行醫(yī)廉政教育專題課件
- 醫(yī)務(wù)人員職業(yè)健康安全健康-課件
- 安全組織機(jī)構(gòu)圖
- 舊石器時(shí)代考古-基礎(chǔ)知識(shí)課件
- 江蘇省建設(shè)工程現(xiàn)場(chǎng)安全文明施工措施費(fèi)計(jì)價(jià)管理辦法
- 病區(qū)藥品規(guī)范化管理與問題對(duì)策黃池桃
- 螺紋塞規(guī)操作規(guī)程
- 2023年北京天文館招聘筆試備考題庫及答案解析
- 應(yīng)急救援隊(duì)伍單兵體能訓(xùn)練項(xiàng)目要求
評(píng)論
0/150
提交評(píng)論