第07章-1 子程序設(shè)計(jì)與多模塊編程_第1頁
第07章-1 子程序設(shè)計(jì)與多模塊編程_第2頁
第07章-1 子程序設(shè)計(jì)與多模塊編程_第3頁
第07章-1 子程序設(shè)計(jì)與多模塊編程_第4頁
第07章-1 子程序設(shè)計(jì)與多模塊編程_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第七章子程序設(shè)計(jì)與多模塊編程7.1子程序的引出7.2子程序(過程)定義偽指令7.3調(diào)用和返回指令7.4子程序設(shè)計(jì)方法7.5子程序嵌套7.6遞歸子程序7.7可重入子程序7.8程序的連接7.1子程序的引出在我們編寫解決實(shí)際問題的程序時,往往會遇到多處使用相同功能的程序段,使用該程序段的唯一差別是對程序變量賦不同的值,例如計(jì)算:S=√2X+√3Y+√150計(jì)算上述函數(shù)需要多次使用開方運(yùn)算,如果每次用到開方運(yùn)算就編寫一段開方程序,那末開方程序在程序中會多次出現(xiàn),不僅書寫麻煩,容易出錯,編輯、匯編它時,也會花費(fèi)較多時間。同時,由于冗長,占用內(nèi)存也較多。如果把多次使用的功能程序編制為一個獨(dú)立的程序段,每當(dāng)用到這種功能時,就將控制轉(zhuǎn)向它,完成功能后再返回到原來的程序,這就會大大減少編程工作量。7.1子程序的引出

使用子程序的好處:(1)簡化了程序設(shè)計(jì)過程,減少了工作量,節(jié)省了時間;(2)源程序縮短,節(jié)省了機(jī)器匯編源程序的時間和存儲目標(biāo)代碼的存儲空間;(3)增加了源程序的可讀性,便于調(diào)試維護(hù);(4)有利于程序模塊化、結(jié)構(gòu)化和自頂向下的程序設(shè)計(jì);(5)子程序一旦編制成功,在開發(fā)研制各種軟件時都可利用,大大縮短了軟件的開發(fā)周期。7.1子程序的引出

子程序設(shè)計(jì)需了解的問題:1.子程序的定義與調(diào)用設(shè)計(jì)出可以完成相對獨(dú)立功能的程序段,并對匯編程序提供必要的信息,使得對該程序段匯編之后,在需要時可以被其他主程序調(diào)用,這一過程稱為子程序的定義。已定義的子程序在什么時候被執(zhí)行,執(zhí)行多少次,都不是由子程序自身決定的。在主程序需要調(diào)用相應(yīng)的子程序時,可以用調(diào)用子程序指令使得相應(yīng)子程序被執(zhí)行。2.主程序與子程序之間的調(diào)用與返回在主程序需要利用子程序的執(zhí)行來完成某種工作時,就可以使用調(diào)用子程序指令來調(diào)用相應(yīng)的子程序;在子程序完成它應(yīng)該完成的工作之后,應(yīng)當(dāng)用返回指令返回調(diào)用它的主程序。主程序::CALLSUBR::子程序SUBR:::::RET7.2子程序(過程)定義偽指令子程序定義偽指令所定義的子程序的一般格式:PNPROC[NEAR]/[FAR];說明過程開始:;過程體:RETPNENDP;說明過程結(jié)束7.3調(diào)用和返回指令1.調(diào)用分類(1)段內(nèi)調(diào)用與段間調(diào)用段內(nèi)調(diào)用:轉(zhuǎn)返地址只用IP實(shí)現(xiàn);段間調(diào)用:轉(zhuǎn)返地址由CS和IP實(shí)現(xiàn)。(2)直接調(diào)用與間接調(diào)用直接調(diào)用:調(diào)用指令使用過程名調(diào)用過程,過程的指令入口地址偏移量直接送入IP來實(shí)現(xiàn)。間接調(diào)用:調(diào)用指令通過某寄存器或某存儲器單元指出被調(diào)用程序的入口地址。2.調(diào)用指令

指令匯編格式:CALLPROCNAME/REGNAME/MEMLABEL

操作:(1)段內(nèi)調(diào)用:SP←SP-2(SP+1,SP)←IPIP←OFFSETPROCNAME或REGNAME或(MEMLABEL)

(2)段間調(diào)用:SP←SP-2(SP+1,SP)←CSCS←SEGPROCNAME或(MEMLABEL+2,MEMLABEL+3)SP←SP-2(SP+1,SP)←IPIP←OFFSETPROCNAME或(MEMLABEL,MEMLABEL+1)受影響的寄存器:沒有3.返回指令指令匯編格式:RET[VAL]操作:(1)段內(nèi)返回:IP←(SP+1,SP)SP←SP+2SP←SP+VAL(如果選用了VAL)

(2)段間返回:IP←(SP+1,SP)SP←SP+2CS←(SP+1,SP)SP←SP+2SP←SP+VAL(如果選用了VAL)受影響的寄存器:沒有7.4子程序設(shè)計(jì)方法7.4.1現(xiàn)場的保護(hù)和恢復(fù)7.4.2子程序說明文件7.4.3主程序與子程序之間的參數(shù)傳遞7.4.1現(xiàn)場的保護(hù)和恢復(fù)子程序中需要使用的寄存器,有可能在主程序中正被用來保存某種中間結(jié)果,這些寄存器的值在從子程序返回主程序后還要繼續(xù)使用,這些寄存器的值或所需的標(biāo)志位的值等信息稱之為現(xiàn)場。顯然,子程序執(zhí)行前需要保護(hù)現(xiàn)場,返回時要恢復(fù)現(xiàn)場。保存現(xiàn)場與恢復(fù)現(xiàn)場的工作既可在調(diào)用程序中完成,也可在子程序中完成,程序設(shè)計(jì)時根據(jù)情況安排。如果子程序已經(jīng)設(shè)計(jì)好了,而其中未保護(hù)主程序現(xiàn)場,那么調(diào)用程序在使用子程序之前應(yīng)保護(hù)現(xiàn)場,從子程序返回后再恢復(fù)現(xiàn)場。通常在主程序中保護(hù)現(xiàn)場,則一定在主程序中恢復(fù);在子程序中保護(hù)現(xiàn)場,則一定在子程序中恢復(fù)。這樣可以增強(qiáng)主程序和子程序之間的相對獨(dú)立性,減少相互依賴,使程序結(jié)構(gòu)清楚,減少錯誤。7.4.1現(xiàn)場的保護(hù)和恢復(fù)保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場的方法:(1)利用壓棧和出棧指令,將寄存器內(nèi)容或狀態(tài)標(biāo)志位內(nèi)容保存在堆棧中,恢復(fù)時再從堆棧中取出。例子:

SQROOT1PROC NEARPUSHAX ;保存現(xiàn)場PUSHBXPUSHCX... ;子程序正常工作POPCX ;恢復(fù)現(xiàn)場POPBXPOPAXRETSQROOT1ENDP(2)利用內(nèi)存單元。用傳送指令將寄存器的內(nèi)容保存到指定的內(nèi)存單元,恢復(fù)時再用傳送指令取出。7.4.2子程序說明文件(1)子程序名(子程序入口地址):用過程(子程序)定義偽指令定義該過程(子程序)時的過程名,這時過程(子程序)中第一條語句必須是子程序的入口指令;否則應(yīng)寫子程序入口指令的標(biāo)號或地址。(2)子程序功能:用自然語言或數(shù)學(xué)語言等形式簡單清楚地描述子程序完成的任務(wù)。(3)入口條件:說明子程序要求有幾個入口參數(shù),這些參數(shù)表示的意義及存放位置。(4)出口條件:說明子程序有幾個輸出參數(shù)(運(yùn)行結(jié)果),這些參數(shù)表示的意義、存放的位置。(5)受影響的寄存器:說明子程序運(yùn)行后,哪些寄存器的內(nèi)容被破壞了,以便使用者在調(diào)用該子程序之前注意保護(hù)現(xiàn)場。7.4.2子程序說明文件子程序說明文件例子:(1)子程序名:SQROOT1;(2)程序功能:求雙字節(jié)整數(shù)的平方根的整數(shù)部分;(3)入口條件:被開方數(shù)放在DX中;(4)出口條件:平方根在DX中;(5)受影響的寄存器:AX,BX,CX,DX及標(biāo)志寄存器F。7.4.3主程序與子程序之間的參數(shù)傳遞子程序運(yùn)行時所需的加工對象應(yīng)由調(diào)用程序提供,處理的結(jié)果應(yīng)提供調(diào)用程序使用,二者之間要進(jìn)行信息交換或者說相互之間要傳遞參數(shù)。常用的傳送方法有四種:(1)約定寄存器法;(2)約定存儲單元法;(3)堆棧法;(4)約定參數(shù)地址指針法。以計(jì)算下述函數(shù)為例,說明各種參數(shù)傳送方法。

例7.1編制程序計(jì)算:Z=√2X+√3Y+√150設(shè)X,Y為整數(shù)字?jǐn)?shù)據(jù),且存于PX和PY單元,計(jì)算結(jié)果存入RLT單元。1.約定寄存器法

約定寄存器法傳送參數(shù),即事先約定一些存放參數(shù)的通用寄存器,調(diào)用程序轉(zhuǎn)向子程序時,先把要傳送的參數(shù)放到約定好的寄存器中,子程序工作時,從約定的寄存器中取參數(shù),然后把結(jié)果存入事先約定的寄存器中,調(diào)用程序再從約定的寄存器中取結(jié)果。這種方法是程序設(shè)計(jì)中最常用、最簡單、最方便的方法,在傳送參數(shù)不多的情況下都采用此方法。1.約定寄存器法

開平方子程序和調(diào)用程序,約定將被開平方數(shù)放在DX中,平方根也放在DX中,其結(jié)果求得平方根的整數(shù)部分。1:;*****EXAM7.1.1S*****2:SQROOT1 PROC NEAR3: XOR AX,AX ;i←04: AND DX,DX ;測試被開方數(shù)5: JZ SQRT2 ;被開方數(shù)為06:SQRT1: MOV BX,AX ;形成奇數(shù)7: SHL BX,18: INC BX9: SUB DX,BX ;被開方數(shù)減去奇數(shù)10: JC SQRT2 ;不夠減11: INC AX ;夠減,i增112: JMP SQRT1 ;繼續(xù)13:SQRT2: MOV DX,AX ;DX←平方根14: RET ;返回15:SQROOT1 ENDP1.約定寄存器法調(diào)用程序:1:;*****EXAM7.1.1M*****2:SSEGSEGMENTSTACK3:STKTOPDB20DUP(0)4:SSEGENDS5:DSEGSEGMENT6:PXDW123457:PYDW24698:RLTDW09:DSEGENDS10:CSEGSEGMENT11:ASSUMECS:CSEG,DS:DSEG12:ASSUMESS:SSEG13:MAIN1:MOVAX,DSEG14:MOVDS,AX15:MOVAX,SSEG16:MOVSS,AX

17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X20: CALL SQROOT1 ;調(diào)用開平方子程序21: PUSH DX ;暫存結(jié)果√2X22: MOV DX,PY ;取Y23: MOV AX,DX ;計(jì)算3Y24: ADD DX,DX25: ADD DX,AX26: CALL SQROOT1 ;調(diào)用開平方子程序27: POP AX ;取出√2X28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,15031: CALL SQROOT132: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN1SQROOT1 PROC NEAR XOR AX,AX AND DX,DX JZ SQRT2SQRT1: MOV BX,AX SHL BX,1 INC BX SUB DX,BX JC SQRT2 INC AX JMP SQRT1SQRT2: MOV DX,AX RETSQROOT1 ENDP17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X20: CALL SQROOT1 ;調(diào)用開平方子程序21: PUSH DX ;暫存結(jié)果√2X22: MOV DX,PY ;取Y23: MOV AX,DX ;計(jì)算3Y24: ADD DX,DX25: ADD DX,AX26: CALL SQROOT1 ;調(diào)用開平方子程序27: POP AX ;取出√2X28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,15031: CALL SQROOT132: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN1SQROOT1 PROC NEAR XOR AX,AX AND DX,DX JZ SQRT2SQRT1: MOV BX,AX SHL BX,1 INC BX SUB DX,BX JC SQRT2 INC AX JMP SQRT1SQRT2: MOV DX,AX RETSQROOT1 ENDP①②③④⑤初始態(tài)(執(zhí)行指令①后)17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X20: CALL SQROOT1 ;調(diào)用開平方子程序21: PUSH DX ;暫存結(jié)果√2X22: MOV DX,PY ;取Y23: MOV AX,DX ;計(jì)算3Y24: ADD DX,DX25: ADD DX,AX26: CALL SQROOT1 ;調(diào)用開平方子程序27: POP AX ;取出√2X28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,15031: CALL SQROOT132: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN1SQROOT1 PROC NEAR XOR AX,AX AND DX,DX JZ SQRT2SQRT1: MOV BX,AX SHL BX,1 INC BX SUB DX,BX JC SQRT2 INC AX JMP SQRT1SQRT2: MOV DX,AX RETSQROOT1 ENDP①②③④⑤執(zhí)行指令②后17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X20: CALL SQROOT1 ;調(diào)用開平方子程序21: PUSH DX ;暫存結(jié)果√2X22: MOV DX,PY ;取Y23: MOV AX,DX ;計(jì)算3Y24: ADD DX,DX25: ADD DX,AX26: CALL SQROOT1 ;調(diào)用開平方子程序27: POP AX ;取出√2X28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,15031: CALL SQROOT132: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN1SQROOT1 PROC NEAR XOR AX,AX AND DX,DX JZ SQRT2SQRT1: MOV BX,AX SHL BX,1 INC BX SUB DX,BX JC SQRT2 INC AX JMP SQRT1SQRT2: MOV DX,AX RETSQROOT1 ENDP①②③④⑤執(zhí)行指令RET后17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X20: CALL SQROOT1 ;調(diào)用開平方子程序21: PUSH DX ;暫存結(jié)果√2X22: MOV DX,PY ;取Y23: MOV AX,DX ;計(jì)算3Y24: ADD DX,DX25: ADD DX,AX26: CALL SQROOT1 ;調(diào)用開平方子程序27: POP AX ;取出√2X28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,15031: CALL SQROOT132: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END MAIN1SQROOT1 PROC NEAR XOR AX,AX AND DX,DX JZ SQRT2SQRT1: MOV BX,AX SHL BX,1 INC BX SUB DX,BX JC SQRT2 INC AX JMP SQRT1SQRT2: MOV DX,AX RETSQROOT1 ENDP①②③④⑤執(zhí)行指令③后17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X20: CALL SQROOT1 ;調(diào)用開平方子程序21: PUSH DX ;暫存結(jié)果√2X22: MOV DX,PY ;取Y23: MOV AX,DX ;計(jì)算3Y24: ADD DX,DX25: ADD DX,AX26: CALL SQROOT1 ;調(diào)用開平方子程序27: POP AX ;取出√2X28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,15031: CALL SQROOT132: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN1SQROOT1 PROC NEAR XOR AX,AX AND DX,DX JZ SQRT2SQRT1: MOV BX,AX SHL BX,1 INC BX SUB DX,BX JC SQRT2 INC AX JMP SQRT1SQRT2: MOV DX,AX RETSQROOT1 ENDP①②③④⑤執(zhí)行指令④后17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X20: CALL SQROOT1 ;調(diào)用開平方子程序21: PUSH DX ;暫存結(jié)果√2X22: MOV DX,PY ;取Y23: MOV AX,DX ;計(jì)算3Y24: ADD DX,DX25: ADD DX,AX26: CALL SQROOT1 ;調(diào)用開平方子程序27: POP AX ;取出√2X28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,15031: CALL SQROOT132: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN1SQROOT1 PROC NEAR XOR AX,AX AND DX,DX JZ SQRT2SQRT1: MOV BX,AX SHL BX,1 INC BX SUB DX,BX JC SQRT2 INC AX JMP SQRT1SQRT2: MOV DX,AX RETSQROOT1 ENDP①②③④⑤執(zhí)行指令RET后17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X20: CALL SQROOT1 ;調(diào)用開平方子程序21: PUSH DX ;暫存結(jié)果√2X22: MOV DX,PY ;取Y23: MOV AX,DX ;計(jì)算3Y24: ADD DX,DX25: ADD DX,AX26: CALL SQROOT1 ;調(diào)用開平方子程序27: POP AX ;取出√2X28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,15031: CALL SQROOT132: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END MAIN1SQROOT1 PROC NEAR XOR AX,AX AND DX,DX JZ SQRT2SQRT1: MOV BX,AX SHL BX,1 INC BX SUB DX,BX JC SQRT2 INC AX JMP SQRT1SQRT2: MOV DX,AX RETSQROOT1 ENDP①②③④⑤執(zhí)行指令⑤后2.約定存儲單元法

約定存儲單元法傳送參數(shù),與約定寄存器法類似。下面設(shè)計(jì)的開平方子程序與調(diào)用程序,約定被開方數(shù)放在ARGX單元,計(jì)算結(jié)果放入ROOT單元。1:;*****EXAM7.1.2S*****2:SQROOT2 PROC NEAR3: XOR AX,AX ;i←04: AND DX,DX ;測試被開方數(shù)5: JZ SQRT2 ;被開方數(shù)為06:SQRT1: MOV BX,AX ;形成奇數(shù)7: SHL BX,18: INC BX9: SUB DX,BX ;被開方數(shù)減去奇數(shù)10: JC SQRT2 ;不夠減11: INC AX ;夠減,i增112: JMP SQRT1 ;繼續(xù)13:SQRT2: MOV DX,AX 14: RET ;返回15:SQROOT2 ENDPMOVDX,ARGXMOVROOT,AX17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X MOV ARGX,DX20: CALL SQROOT2 ;調(diào)用開平方子程序21: PUSH ROOT ;暫存結(jié)果√2X22: MOV DX,PY ;取Y23: MOV AX,DX ;計(jì)算3Y24: ADD DX,DX25: ADD DX,AX MOV ARGX,DX26: CALL SQROOT2 ;調(diào)用開平方子程序27: POP AX ;取出√2X28: ADD AX,ROOT ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV ARGX,15031: CALL SQROOT232: POP AX ;取出中間結(jié)果33: ADD AX,ROOT ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN1SQROOT2 PROC NEAR XOR AX,AX MOV DX,ARGX

AND DX,DX JZ SQRT2SQRT1: MOV BX,AX SHL BX,1 INC BX SUB DX,BX JC SQRT2 INC AX JMP SQRT1SQRT2: MOV ROOT,AX RETSQROOT2 ENDP3.堆棧法

堆棧法傳送參數(shù)是調(diào)用程序先將參數(shù)壓入堆棧,子程序從堆棧中把參數(shù)取出,進(jìn)行處理,然后把結(jié)果壓入堆棧,調(diào)用程序再從堆棧中取出結(jié)果。1:;*****EXAM7.1.3S*****2:SQROOT3 PROC NEAR3: INC SP4: INC SP5: POP DX6: XOR AX,AX ;i←07: AND DX,DX ;測試被開方數(shù) . . .13:SQRT2: PUSH AX14: DEC SP15: DEC SP 16: RET ;返回17:SQROOT3 ENDP17:①M(fèi)OVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X② PUSH DX20:③ CALL SQROOT3 22: MOV DX,PY 23: MOV AX,DX 24: ADD DX,DX25: ADD DX,AX④ PUSH DX26:⑤ CALL SQROOT3 ⑥ POP DX27:⑦ POP AX 28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,150 PUSH DX31: CALL SQROOT3 POP DX32: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN11:;*****EXAM7.1.3S*****2:SQROOT3 PROC NEAR3: INC SP4: INC SP5: POP DX6: XOR AX,AX 7: AND DX,DX . . .13:SQRT2: PUSH AX14: DEC SP15: DEC SP 16: RET ;返回17:SQROOT3 ENDP初始態(tài)(執(zhí)行指令①后)17:①M(fèi)OVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X② PUSH DX20:③ CALL SQROOT3 22: MOV DX,PY 23: MOV AX,DX 24: ADD DX,DX25: ADD DX,AX④ PUSH DX26:⑤ CALL SQROOT3 ⑥ POP DX27:⑦ POP AX 28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,150 PUSH DX31: CALL SQROOT3 POP DX32: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN11:;*****EXAM7.1.3S*****2:SQROOT3 PROC NEAR3: INC SP4:⑧ INC SP5:⑨ POP DX6: XOR AX,AX 7: AND DX,DX . . .13:㈠SQRT2: PUSH AX14: DEC SP15:㈡ DEC SP 16: RET ;返回17:SQROOT3 ENDP執(zhí)行指令②后17:①M(fèi)OVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X② PUSH DX20:③ CALL SQROOT3 22:xxyy MOV DX,PY 23: MOV AX,DX 24: ADD DX,DX25: ADD DX,AX④ PUSH DX26:⑤ CALL SQROOT3 ⑥ POP DX27:⑦ POP AX 28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,150 PUSH DX31: CALL SQROOT3 POP DX32: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN11:;*****EXAM7.1.3S*****2:SQROOT3 PROC NEAR3: INC SP4:⑧ INC SP5:⑨ POP DX6: XOR AX,AX 7: AND DX,DX . . .13:㈠SQRT2: PUSH AX14: DEC SP15:㈡ DEC SP 16: RET ;返回17:SQROOT3 ENDP執(zhí)行指令③后17:①M(fèi)OVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X② PUSH DX20:③ CALL SQROOT3 22:xxyy MOV DX,PY 23: MOV AX,DX 24: ADD DX,DX25: ADD DX,AX④ PUSH DX26:⑤ CALL SQROOT3 ⑥ POP DX27:⑦ POP AX 28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,150 PUSH DX31: CALL SQROOT3 POP DX32: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN11:;*****EXAM7.1.3S*****2:SQROOT3 PROC NEAR3: INC SP4:⑧ INC SP5:⑨ POP DX6: XOR AX,AX 7: AND DX,DX . . .13:㈠SQRT2: PUSH AX14: DEC SP15:㈡ DEC SP 16: RET ;返回17:SQROOT3 ENDP執(zhí)行指令⑧后17:①M(fèi)OVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X② PUSH DX20:③ CALL SQROOT3 22:xxyy MOV DX,PY 23: MOV AX,DX 24: ADD DX,DX25: ADD DX,AX④ PUSH DX26:⑤ CALL SQROOT3 ⑥ POP DX27:⑦ POP AX 28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,150 PUSH DX31: CALL SQROOT3 POP DX32: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN11:;*****EXAM7.1.3S*****2:SQROOT3 PROC NEAR3: INC SP4:⑧ INC SP5:⑨ POP DX6: XOR AX,AX 7: AND DX,DX . . .13:㈠SQRT2: PUSH AX14: DEC SP15:㈡ DEC SP 16: RET ;返回17:SQROOT3 ENDP執(zhí)行指令⑨后17:①M(fèi)OVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X② PUSH DX20:③ CALL SQROOT3 22:xxyy MOV DX,PY 23: MOV AX,DX 24: ADD DX,DX25: ADD DX,AX④ PUSH DX26:⑤ CALL SQROOT3 ⑥ POP DX27:⑦ POP AX 28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,150 PUSH DX31: CALL SQROOT3 POP DX32: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN11:;*****EXAM7.1.3S*****2:SQROOT3 PROC NEAR3: INC SP4:⑧ INC SP5:⑨ POP DX6: XOR AX,AX 7: AND DX,DX . . .13:㈠SQRT2: PUSH AX14: DEC SP15:㈡ DEC SP 16: RET ;返回17:SQROOT3 ENDP執(zhí)行指令㈠后17:①M(fèi)OVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X② PUSH DX20:③ CALL SQROOT3 22:xxyy MOV DX,PY 23: MOV AX,DX 24: ADD DX,DX25: ADD DX,AX④ PUSH DX26:⑤ CALL SQROOT3 ⑥ POP DX27:⑦ POP AX 28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,150 PUSH DX31: CALL SQROOT3 POP DX32: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN11:;*****EXAM7.1.3S*****2:SQROOT3 PROC NEAR3: INC SP4:⑧ INC SP5:⑨ POP DX6: XOR AX,AX 7: AND DX,DX . . .13:㈠SQRT2: PUSH AX14: DEC SP15:㈡ DEC SP 16: RET ;返回17:SQROOT3 ENDP執(zhí)行指令㈡后17:①M(fèi)OVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X② PUSH DX20:③ CALL SQROOT3 22:xxyy MOV DX,PY 23: MOV AX,DX 24: ADD DX,DX25: ADD DX,AX④ PUSH DX26:⑤ CALL SQROOT3 ⑥ POP DX27:⑦ POP AX 28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,150 PUSH DX31: CALL SQROOT3 POP DX32: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN11:;*****EXAM7.1.3S*****2:SQROOT3 PROC NEAR3: INC SP4:⑧ INC SP5:⑨ POP DX6: XOR AX,AX 7: AND DX,DX . . .13:㈠SQRT2: PUSH AX14: DEC SP15:㈡ DEC SP 16: RET ;返回17:SQROOT3 ENDP執(zhí)行指令RET后17:MOVSP,SIZESTKTOP18: MOV DX,PX ;取X19: ADD DX,DX ;計(jì)算2X PUSH DX20: CALL SQROOT3 22:XXYY MOV DX,PY 23: MOV AX,DX 24: ADD DX,DX25: ADD DX,AX PUSH DX26: CALL SQROOT3 POP DX27: POP AX 28: ADD AX,DX ;計(jì)算√2X+√3Y29: PUSH AX ;暫存結(jié)果30: MOV DX,150 PUSH DX31: CALL SQROOT3 POP DX32: POP AX ;取出中間結(jié)果33: ADD AX,DX ;計(jì)算最終結(jié)果34: MOV RLT,AX ;保存結(jié)果35: MOV AH,4CH36: INT 21H37:CSEG ENDS38: END

MAIN11:;*****EXAM7.1.3S*****2:SQROOT4 PROC NEAR3: PUSH BP4: MOV BP,SP5: MOV DX,[BP+4]6: XOR AX,AX 7: AND DX,DX . . .13:SQRT2: MOV[BP+4],AX14: POP BP15: RET ;返回16:SQROOT4 ENDP執(zhí)行指令RET后4.約定參數(shù)地址指針法當(dāng)要傳送的參數(shù)較多時,用約定地址指針法,即調(diào)用程序?qū)?shù)存放的地址送入約定的地址指針,然后調(diào)用子程序,子程序從地址指針指出的地址取出所需參數(shù)。當(dāng)返回參數(shù)較多時,可存入內(nèi)存某區(qū)域,然后把其首地址指針放入約定的寄存器中,供調(diào)用程序使用。例8.2設(shè)內(nèi)存有三組無符號字整數(shù),三組數(shù)據(jù)的首地址分別為LIST1,LIST2和LIST3,數(shù)據(jù)個數(shù)分別存放在CNT1,CNT2和CNT3單元。編制程序計(jì)算三組數(shù)據(jù)中最小數(shù)之和并存入SUM開始的單元。求一組數(shù)據(jù)中最小數(shù)據(jù)的子程序1:;*****EXAM7.2S*****2:FMIN PROCNEAR;求數(shù)組中最小值3:PUSHSI;保存數(shù)組首址4:MOVAX,[SI];取第一個數(shù)5:DECCX;計(jì)數(shù)值減16:JZRETURN;計(jì)數(shù)值為0,轉(zhuǎn)7:FMIN2:INCSI;修改數(shù)組指針8:INCSI9:CMPAX,[SI];與下一個數(shù)比較10:JBFMIN1;AX中數(shù)小,轉(zhuǎn)11:MOVAX,[SI];小數(shù)取入AX12:FMIN1:LOOPFMIN2;計(jì)數(shù)值減1,不為0轉(zhuǎn)13:RETURN:POPSI;恢復(fù)數(shù)組首值14:RET;返回15:FMINENDP1:;*****EXAM7.2M*****2:SSEG SEGMENTSTACK3:SKTOPDB40DUP(0)4:SSEGENDS5:DSEGSEGMENT6:LIST1DW35,27,165,3,1825,6037:CNT1DW68:LIST2DW438,121,496,6321,28,17,2,1059:CNT2DW810:LIST3DW18,5,19,46,372511:CNT3DW512:SUMDW013:DSEGENDS14:CSEGSEGMENT15:ASSUMECS:CSEG,DS:DSEG16:ASSUMESS:SSEG17:MAIN:MOVAX,DSEG18:MOVDS,AX19:MOVAX,SSEG20:MOVSS,AX21:MOVSP,LENGTHSKTOP22:MOVSI,OFFSETLIST123:MOVCX,CNT124:CALLFMIN25:MOVBX,AX26:MOVSI,OFFSETIST227:MOVCX,CNT228:CALLFMIN29:ADDBX,AX30:MOVSI,OFFSETLIST331:MOVCX,CNT332:CALLFMIN33:ADDBX,AX34:MOVSUM,BX35:MOVAH,4CH36:INT21H37:CSEGENDS38:ENDMAIN子程序設(shè)計(jì)的舉例例7.3計(jì)算三組字?jǐn)?shù)據(jù)中正數(shù)、負(fù)數(shù)和零的個數(shù),并分別存入PCOUNT,MCOUNT和ZCOUNT單元。設(shè)三組數(shù)據(jù)首地址分別ARRY1,ARRY2和ARRY3,數(shù)據(jù)個數(shù)分別在CNT1,CNT2和CNT3單元存放。子程序說明文件如下:(1)子程序名(入口標(biāo)號):PMZN;(2)子程序功能:求一組數(shù)據(jù)中正數(shù)、負(fù)數(shù)和零的個數(shù);(3)入口條件:數(shù)組首地址在SI中;數(shù)組數(shù)據(jù)個數(shù)在CX中;(4)出口條件:正數(shù)個數(shù)在AX中;負(fù)數(shù)個數(shù)在BX中;零的個數(shù)在DX中;(5)受影響的寄存器:AX,BX,DX和標(biāo)志寄存器F。;*****EXAM7.3S***** PUBLIC PMZNCSEGSEGMENT ASSUMECS:CSEGPMZNPROCFAR PUSHSI ;保存數(shù)組首址 PUSHCX ;保存數(shù)據(jù)個數(shù) XORAX,AX ;清計(jì)數(shù)器 XORBX,BX XORDX,DXPMZN0:TESTWORDPTR[SI],0FFFFH ;測試數(shù)據(jù) JSMINUS ;負(fù)轉(zhuǎn) JNZPLUS ;非0轉(zhuǎn) INCDX ;為0,0計(jì)數(shù)器加1 JMPPMZN1PLUS:INCAX ;正數(shù)計(jì)數(shù)器加1 JMPPMZN1MINUS:INCBX ;負(fù)數(shù)計(jì)數(shù)器加1PMZN1:ADDSI,2 ;指向下一個數(shù)據(jù) LOOPPMZN0 ;循環(huán)計(jì)數(shù)減1,非0轉(zhuǎn) POPCX ;恢復(fù)CX POPSI ;恢復(fù)SI RETPMZNENDPCSEGENDS END;*****EXAM7.3.M***** EXTRN PMZN:FARSSEGSEGMENTSTACKSKTOPDB50DUP(0)SSEGENDSDSEGSEGMENTARRY1DW15,-5,1,5,0,123,964,-327,0CNT1DW9ARRY2DW103,4,-8,-23,0,827,-936,0,0,18CNT2DW10ARRY3DW-29,-137,-23,0,4,0CNT3DW6PCOUNTDW0 ;保存結(jié)果單元MCOUNTDW0ZCOUNTDW0ADRDWOFFSETARRY1,OFFSETCNT1 DWOFFSETARRY2,OFFSETCNT2 DWOFFSETARRY3,OFFSETCNT3DSEGENDSCSEGSEGMENT ASSUMECS:CSEG,DS:DSEG ASSUMESS:SSEGSTART:MOVAX,DSEG MOVDS,AX MOVAX,SSEG MOVSS,AX MOVSP,LENGTHSKTOP

LEADI,ADR MOVCX,03AGAIN:MOVSI,[DI] ;取數(shù)組首址→SI MOVBX,[DI+2] ;取數(shù)組數(shù)據(jù)個數(shù)首址 PUSHCX ;保存CX中的循環(huán)計(jì)數(shù)值 MOVCX,[BX] ;取數(shù)組數(shù)據(jù)個數(shù)→CX CALLFARPTRPMZN ADDPCOUNT,AX ;累加結(jié)果 ADDMCOUNT,BX ADDZCOUNT,DX ADDDI,4 ;修改指針指向下一數(shù)組 POPCX ;恢復(fù)CX中循環(huán)計(jì)數(shù) LOOPAGAIN ;CX計(jì)數(shù)值減1,非0轉(zhuǎn) MOVAH,4CH INT21HCSEGEND ENDSTART7.5子程序嵌套我們編制子程序時,如果用到已有的某種功能的子程序,也可以采用調(diào)用的方法,在一個子程序的內(nèi)部再調(diào)用其它子程序,稱為子程序嵌套。這樣的子程序稱為嵌套子程序。嵌套子程序的層數(shù)稱為嵌套深度,一般設(shè)有硬件堆棧的計(jì)算機(jī),嵌套深度只受堆棧區(qū)大小的限制。假設(shè)我們已經(jīng)有一個子程序,其說明文件和程序清單如下:(1)子程序名:HTOA;(2)子程序功能:將一位十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼;(3)入口條件:要轉(zhuǎn)換的數(shù)據(jù)在AL中的低四位;(4)出口條件:十六進(jìn)制數(shù)的ASCII碼在AL中;(5)受影響的寄存器:AL和標(biāo)志寄存器F。程序清單如下:;*****EXAM7.4S3*****HTOA PROC NEARANDAL,0FH CMPAL,10 JCHTOA1 ADDAL,07HTOA1:ADDAL,30H RETHTOAENDP(1)子程序名:BHTOA;(2)子程序功能:將兩位十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼;(3)入口條件:兩位十六進(jìn)制數(shù)在AL中;(4)出口條件:高位十六進(jìn)制數(shù)的ASCII碼在AH中;低位十六進(jìn)制數(shù)的ASCII碼在AL中;(5)受影響的寄存器:AX和標(biāo)志寄存器F。;*****EXAM7.4S2*****BHTOA PROC PUSHCX MOVCH,AL MOVCL,04 SHRAL,CL CALLHTOA MOVAH,AL MOVAL,CH CALLHTOA POPCX RETBHTOA ENDP

假定在內(nèi)存DATA單元存放著一個無符號的字節(jié)數(shù)據(jù),將它在屏幕上顯示出來。DSEG SEGMENTDATA DB 4CHDSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG MOV DS,AX MOV AL,DATA CALL BHTOA PUSH AX MOV DL,AH MOV AH,2 INT 21H POP DX INT 21H MOV AX,4C00H INT 21HCSEG ENDS END START7.6遞歸子程序子程序能直接或間地調(diào)用自身稱為遞歸調(diào)用,具有遞歸調(diào)用性質(zhì)的子程序稱為遞歸子程序。遞歸子程序一般用于解遞歸函數(shù),遞歸函數(shù)定義具有下述兩個組成部分:1.遞歸函數(shù)的遞歸過程必須是有限的。即每個遞歸函數(shù)有一個非遞歸終值,遞歸過程(子程序)一旦求得該值,就結(jié)束遞歸。2.任一函數(shù)項(xiàng)的值都有明確的定義,其值可由函數(shù)中的一項(xiàng)或幾項(xiàng)值求得。

舉例:階乘函數(shù),對于任一個大于等于0的正整數(shù)N,其函數(shù)值定義為:1(N=0)FACT(N)=

N*FACT(N-1)(N>0)

{算法(1)測試N=0嗎?是,則令FACT(N)=1,返回;(2)保存N,并令N=N-1,調(diào)用自身求得FACT(N-1);(3)順序取出保存的N值(后保存的先取出);(4)計(jì)算FACT(N)=N*FACT(N-1),并返回。1:;*****EXAM7.5S*****2:FACT PROC NEAR3:ANDBX,BX4:JZ FACT15:PUSHBX6:DECBX7:CALLFACT8:F:POPBX9:MULBX10:RET11:FACT1:MOVAX,112:RET13:FACTENDP舉例:求4!SSEG SEGMENTSKTOP DB 20HDUP(0)SSEG ENDSCSEG SEGMENT ASSUMECS:CSEGFACT PROC NEAR AND BX,BX JZ FACT1 PUSH BX DEC BX CALL FACTaabb POP BX MUL BX RETFACT1: MOV AX,1 RETFACT ENDPMIAN: MOV AX,SSEG MOV DS,AX① MOV SP,SIZESKTOP MOV BX,4② CALL FACTxxyy NOPCSEG ENDS END MAIN執(zhí)行指令①后舉例:求4!SSEG SEGMENTSKTOP DB 20HDUP(0)SSEG ENDSCSEG SEGMENT ASSUMECS:CSEGFACT PROC NEAR AND BX,BX JZ FACT1③ PUSH BX DEC BX④ CALL FACTaabb POP BX MUL BX⑤ RETFACT1: MOV AX,1⑥ RETFACT ENDPMIAN: MOV AX,SSEG MOV DS,AX① MOV SP,SIZESKTOP MOV BX,4② CALL FACTxxyy NOPCSEG ENDS END MAIN執(zhí)行指令②后BX=4AX=?SP=1EH舉例:求4!SSEG SEGMENTSKTOP DB 20HDUP(0)SSEG ENDSCSEG SEGMENT ASSUMECS:CSEGFACT PROC NEAR AND BX,BX JZ FACT1③ PUSH BX DEC BX④ CALL FACTaabb POP BX MUL BX⑤ RETFACT1: MOV AX,1⑥ RETFACT ENDPMIAN: MOV AX,SSEG MOV DS,AX① MOV SP,SIZESKTOP MOV BX,4② CALL FACTxxyy NOPCSEG ENDS END MAIN執(zhí)行指令③后BX=4AX=?SP=1CH舉例:求4!SSEG SEGMENTSKTOP DB 20HDUP(0)SSEG ENDSCSEG SEGMENT ASSUMECS:CSEGFACT PROC NEAR AND BX,BX JZ FACT1③ PUSH BX DEC BX④ CALL FACTaabb POP BX MUL BX⑤ RETFACT1: MOV AX,1⑥ RETFACT ENDPMIAN: MOV AX,SSEG MOV DS,AX① MOV SP,SIZESKTOP MOV BX,4② CALL FACTxxyy NOPCSEG ENDS END MAIN執(zhí)行指令④后BX=3AX=?SP=1AH舉例:求4!SSEG SEGMENTSKTOP DB 20HDUP(0)SSEG ENDSCSEG SEGMENT ASSUMECS:CSEGFACT PROC NEAR AND BX,BX JZ FACT1③ PUSH BX DEC BX④ CALL FACTaabb POP BX MUL BX⑤ RETFACT1: MOV AX,1⑥ RETFACT ENDPMIAN: MOV AX,SSEG MOV DS,AX① MOV SP,SIZESKTOP MOV BX,4② CALL FACTxxyy NOPCSEG ENDS END MAIN再執(zhí)行指令③后BX=3AX=?SP=18H舉例:求4!SSEG SEGMENTSKTOP DB 20HDUP(0)SSEG ENDSCSEG SEGMENT ASSUMECS:CSEGFACT PROC NEAR AND BX,BX JZ FACT1③ PUSH BX DEC BX④ CALL FACTaabb POP BX MUL BX⑤ RETFACT1: MOV AX,1⑥ RETFACT ENDPMIAN: MOV AX,SSEG MOV DS,AX① MOV SP,SIZESKTOP MOV BX,4② CALL FACTxxyy NOPCSEG ENDS END MAIN再執(zhí)行指令④后BX=2AX=?SP=16H舉例:求4!SSEG SEGMENTSKTOP DB 20HDUP(0)SSEG ENDSCSEG SEGMENT ASSUMECS:CSEGFACT PROC NEAR AND BX,BX JZ FACT1③ PUSH BX DEC BX④ CALL FACTaabb POP BX MUL BX⑤ RETFACT1: MOV AX,1⑥ RETFACT ENDPMIAN: MOV AX,SSEG MOV DS,AX① MOV SP,SIZESKTOP MOV BX,4② CALL FACTxxyy NOPCSEG ENDS END MAIN再執(zhí)行指令③后BX=2AX=?SP=14H舉例:求4!SSEG SEGMENTSKTOP DB 20HDUP(0)SSEG ENDSCSEG SEGMENT ASSUMECS:CSEGFACT PROC NEAR AND BX,BX JZ FACT1③ PUSH BX DEC BX④ CALL FACTaabb POP BX MUL BX⑤ RETFACT1: MOV AX,1⑥ RETFACT ENDPMIAN: MOV AX,SSEG MOV DS,AX① MOV SP,SIZESKTOP MOV BX,4② CALL FACTxxyy

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論