匯編語(yǔ)言 第08章 子程序設(shè)計(jì).ppt_第1頁(yè)
匯編語(yǔ)言 第08章 子程序設(shè)計(jì).ppt_第2頁(yè)
匯編語(yǔ)言 第08章 子程序設(shè)計(jì).ppt_第3頁(yè)
匯編語(yǔ)言 第08章 子程序設(shè)計(jì).ppt_第4頁(yè)
匯編語(yǔ)言 第08章 子程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第八章子程序設(shè)計(jì),8.1 子程序的引出 8.2 子程序(過(guò)程)定義偽指令 8.3 調(diào)用和返回指令 8.4 子程序設(shè)計(jì)方法 8.5 子程序嵌套 8.6 遞歸子程序 8.7 可重入子程序 8.8 程序的連接,8.1 子程序的引出,在我們編寫(xiě)解決實(shí)際問(wèn)題的程序時(shí),往往會(huì)遇到多處使用相同功能的程序段, 使用該程序段的唯一差別是對(duì)程序變量賦不同的值,例如計(jì)算: S=2X+3Y+150 計(jì)算上述函數(shù)需要多次使用開(kāi)方運(yùn)算,如果每次用到開(kāi)方運(yùn)算就編寫(xiě)一段開(kāi)方程序,那末開(kāi)方程序在程序中會(huì)多次出現(xiàn),不僅書(shū)寫(xiě)麻煩,容易出錯(cuò),編輯、匯編它時(shí),也會(huì)花費(fèi)較多時(shí)間。同時(shí),由于冗長(zhǎng),占用內(nèi)存也較多。如果把多次使用的功能程序編

2、制為一個(gè)獨(dú)立的程序段,每當(dāng)用到這種功能時(shí),就將控制轉(zhuǎn)向它,完成功能后再返回到原來(lái) 的程序,這就會(huì)大大減少編程工作量。,8.1 子程序的引出,使用子程序的好處: (1)簡(jiǎn)化了程序設(shè)計(jì)過(guò)程,減少了工作量,節(jié)省了時(shí)間; (2)源程序縮短,節(jié)省了機(jī)器匯編源程序的時(shí)間和存儲(chǔ)目標(biāo)代碼的存儲(chǔ)空間; (3)增加了源程序的可讀性,便于調(diào)試維護(hù); (4)有利于程序模塊化、結(jié)構(gòu)化和自頂向下的程序設(shè)計(jì); (5)子程序一旦編制成功,在開(kāi)發(fā)研制各種軟件時(shí)都可利用,大大縮短了軟件的開(kāi)發(fā)周期。,8.1 子程序的引出,子程序設(shè)計(jì)需了解的問(wèn)題: 1.子程序的定義與調(diào)用 設(shè)計(jì)出可以完成相對(duì)獨(dú)立功能的程序段,并對(duì)匯編程序提供必要的信

3、息,使得對(duì)該程序段匯編之后,在需要時(shí)可以被其他主程序調(diào)用,這一過(guò)程稱為子程序的定義。 已定義的子程序在什么時(shí)候被執(zhí)行,執(zhí)行多少次,都不是由子程序自身決定的。在主程序需要調(diào)用相應(yīng)的子程序時(shí),可以用調(diào)用子程序指令使得相應(yīng)子程序被執(zhí)行。 2.主程序與子程序之間的調(diào)用與返回 在主程序需要利用子程序的執(zhí)行來(lái)完成某種工作時(shí),就可以使用調(diào)用子程序指令來(lái)調(diào)用相應(yīng)的子程序;在子程序完成它應(yīng)該完成的工作之后,應(yīng)當(dāng)用返回指令返回調(diào)用它的主程序。,主程序,: : CALL SUBR : :,子程序SUBR,: : : : : RET,8.2 子程序(過(guò)程)定義偽指令,子程序定義偽指令所定義的子程序的一般格式: PN

4、PROCNEAR/FAR ;說(shuō)明過(guò)程開(kāi)始 : ;過(guò)程體 : PN ENDP ;說(shuō)明過(guò)程結(jié)束,8.3 調(diào)用和返回指令,1.調(diào)用分類 (1)段內(nèi)調(diào)用與段間調(diào)用 (2)直接調(diào)用與間接調(diào)用,2.調(diào)用指令,指令匯編格式:CALL PROCNAMEREGNAMEMEMLABEL 操作:(1)段內(nèi)調(diào)用: SPSP-2 (SP+1,SP)IP IPOFFSET PROCNAME或REGNAME或(MEMLABEL) (2)段間調(diào)用: SPSP-2 (SP+1,SP)CS CSSEG PROCNAME或(MEMLABEL+2,MEMLABEL+3) SPSP-2 (SP+1,SP)IP IPOFFSET PRO

5、CNAME或(MEMLABEL,MEMLABEL+1) 受影響的寄存器:沒(méi)有,3.返回指令,指令匯編格式:RET VAL 操作:(1)段內(nèi)返回: IP(SP+1,SP) SPSP+2 SPSP+VAL(如果選用了VAL) (2)段間返回: IP(SP+1,SP) SPSP+2 CS(SP+1,SP) SPSP+2 SPSP+VAL(如果選用了VAL) 受影響的寄存器:沒(méi)有,8.4子程序設(shè)計(jì)方法,8.4.1 現(xiàn)場(chǎng)的保護(hù)和恢復(fù) 8.4.2 子程序說(shuō)明文件 8.4.3 主程序與子程序之間的參數(shù)傳遞,8.4.1 現(xiàn)場(chǎng)的保護(hù)和恢復(fù),子程序中需要使用的寄存器,有可能在主程序中正被用來(lái)保存某種中間結(jié)果,這些

6、寄存器的值在從子程序返回主程序后還要繼續(xù)使用, 這些寄存器的值或所需的標(biāo)志位的值等信息稱之為現(xiàn)場(chǎng)。顯然,子程序執(zhí)行前需要保護(hù)現(xiàn)場(chǎng),返回時(shí)要恢復(fù)現(xiàn)場(chǎng)。 保存現(xiàn)場(chǎng)與恢復(fù)現(xiàn)場(chǎng)的工作既可在調(diào)用程序中完成,也可在子程序中完成,程序設(shè)計(jì)時(shí)根據(jù)情況安排。如果子程序已經(jīng)設(shè)計(jì)好了,而其中未保護(hù)主程序現(xiàn)場(chǎng),那么調(diào)用程序在使用子程序之前應(yīng)保護(hù)現(xiàn)場(chǎng),從子程序返回后再恢復(fù)現(xiàn)場(chǎng)。 通常在主程序中保護(hù)現(xiàn)場(chǎng),則一定在主程序中恢復(fù);在子程序中保護(hù)現(xiàn)場(chǎng),則一定在子程序中恢復(fù)。這樣可以增強(qiáng)主程序和子程序之間的相對(duì)獨(dú)立性,減少相互依賴,使程序結(jié)構(gòu)清楚,減少錯(cuò)誤。,8.4.1 現(xiàn)場(chǎng)的保護(hù)和恢復(fù),保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)的方法: (1) 利用

7、壓棧和出棧指令,將寄存器內(nèi)容或狀態(tài)標(biāo)志位內(nèi)容保存在堆棧中,恢復(fù)時(shí)再?gòu)亩褩V腥〕觥?例子: SQROOT1 PROC NEAR PUSH AX;保存現(xiàn)場(chǎng) PUSH BX PUSH CX . ;子程序正常工作 POP CX ;恢復(fù)現(xiàn)場(chǎng) POP BX POP AX RET SQROOT1 ENDP (2) 利用內(nèi)存單元。用傳送指令將寄存器的內(nèi)容保存到指定的內(nèi)存單元,恢復(fù)時(shí)再用傳送指令取出。,8.4.2子程序說(shuō)明文件,(1)子程序名(子程序入口地址):用過(guò)程(子程序)定義偽指令定義該過(guò)程(子程序)時(shí)的過(guò)程名,這時(shí)過(guò)程(子程序)中第一條語(yǔ)句必須是子程序的入口指令;否則應(yīng)寫(xiě)子程序入口指令的標(biāo)號(hào)或地址。 (

8、2)子程序功能:用自然語(yǔ)言或數(shù)學(xué)語(yǔ)言等形式簡(jiǎn)單清楚地描述子程序完成的任務(wù)。 (3)入口條件:說(shuō)明子程序要求有幾個(gè)入口參數(shù),這些參數(shù)表示的意義及存放位置。 (4)出口條件:說(shuō)明子程序有幾個(gè)輸出參數(shù)(運(yùn)行結(jié)果),這些參數(shù)表示的意義、存放的位置。 (5)受影響的寄存器:說(shuō)明子程序運(yùn)行后,哪些寄存器的內(nèi)容被破壞了,以便使用者在調(diào)用該子程序之前注意保護(hù)現(xiàn)場(chǎng)。,8.4.2子程序說(shuō)明文件,子程序說(shuō)明文件例子: (1)子程序名:SQROOT1; (2)程序功能:求雙字節(jié)整數(shù)的平方根的整數(shù)部分; (3)入口條件:被開(kāi)方數(shù)放在DX中; (4)出口條件:平方根在DX中; (5)受影響的寄存器:AX,BX,CX,DX

9、及標(biāo)志寄存器F。,8.4.3 主程序與子程序之間的參數(shù)傳遞,子程序運(yùn)行時(shí)所需的加工對(duì)象應(yīng)由調(diào)用程序提供,處理的結(jié)果應(yīng)提供調(diào)用程序使用,二者之間要進(jìn)行信息交換或者說(shuō)相互之間要傳遞參數(shù)。 常用的傳送方法有四種: (1)約定寄存器法; (2)約定存儲(chǔ)單元法; (3)堆棧法; (4)約定參數(shù)地址指針?lè)ā?以計(jì)算下述函數(shù)為例,說(shuō)明各種參數(shù)傳送方法。 例8.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ù)放到約定好的寄存器中,子

10、程序工作時(shí),從約定的寄存器中取參數(shù),然后把結(jié)果存入事先約定的寄存器中,調(diào)用程序再?gòu)募s定的寄存器中取結(jié)果。這種方法是程序設(shè)計(jì)中最常用、最簡(jiǎn)單、最方便的方法,在傳送參數(shù)不多的情況下都采用此方法。,1.約定寄存器法,開(kāi)平方子程序和調(diào)用程序,約定將被開(kāi)平方數(shù)放在DX中,平方根也放在DX中,其結(jié)果求得平方根的整數(shù)部分。 1:;*EXAM8.1.1S* 2:SQROOT1PROCNEAR 3:XORAX,AX;i0 4:ANDDX,DX;測(cè)試被開(kāi)方數(shù) 5:JZSQRT2;被開(kāi)方數(shù)為0 6:SQRT1:MOVBX,AX;形成奇數(shù) 7:SHLBX,1 8:INCBX 9:SUBDX,BX;被開(kāi)方數(shù)減去奇數(shù) 1

11、0:JCSQRT2;不夠減 11:INCAX;夠減,i增1 12:JMPSQRT1;繼續(xù) 13:SQRT2:MOVDX,AX;DX平方根 14:RET;返回 15:SQROOT1ENDP,1.約定寄存器法,調(diào)用程序: 1:;*EXAM 8.1.1M* 2:SSEGSEGMENT STACK 3:STKTOP DB 20 DUP(0) 4:SSEG ENDS 5:DSEG SEGMENT 6:PX DW 12345 7:PY DW 2469 8:RLT DW 0 9:DSEG ENDS 10:CSEG SEGMENT 11: ASSUME CS:CSEG,DS:DSEG 12: ASSUME S

12、S:SSEG 13:MAIN1: MOV AX,DSEG 14: MOV DS,AX 15: MOV AX,SSEG 16: MOV SS,AX,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X 20:CALLSQROOT1;調(diào)用開(kāi)平方子程序 21:PUSHDX;暫存結(jié)果2X 22:MOVDX,PY;取Y 23:MOVAX,DX;計(jì)算3Y 24:ADDDX,DX 25:ADDDX,AX 26:CALLSQROOT1;調(diào)用開(kāi)平方子程序 27:POPAX;取出2X 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30

13、:MOVDX,150 31:CALLSQROOT1 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,SQROOT1PROCNEAR XORAX,AX ANDDX,DX JZSQRT2 SQRT1:MOVBX,AX SHLBX,1 INCBX SUBDX,BX JCSQRT2 INCAX JMPSQRT1 SQRT2:MOVDX,AX RET SQROOT1ENDP,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19

14、:ADDDX,DX;計(jì)算2X 20:CALLSQROOT1;調(diào)用開(kāi)平方子程序 21:PUSHDX;暫存結(jié)果2X 22:MOVDX,PY;取Y 23:MOVAX,DX;計(jì)算3Y 24:ADDDX,DX 25:ADDDX,AX 26:CALLSQROOT1;調(diào)用開(kāi)平方子程序 27:POPAX;取出2X 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 31:CALLSQROOT1 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS

15、 38:ENDMAIN1,SQROOT1PROCNEAR XORAX,AX ANDDX,DX JZSQRT2 SQRT1:MOVBX,AX SHLBX,1 INCBX SUBDX,BX JCSQRT2 INCAX JMPSQRT1 SQRT2:MOVDX,AX RET SQROOT1ENDP,初始態(tài)(執(zhí)行指令后),17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X 20:CALLSQROOT1;調(diào)用開(kāi)平方子程序 21:PUSHDX;暫存結(jié)果2X 22:MOVDX,PY;取Y 23:MOVAX,DX;計(jì)算3Y 24:ADDDX,DX 25

16、:ADDDX,AX 26:CALLSQROOT1;調(diào)用開(kāi)平方子程序 27:POPAX;取出2X 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 31:CALLSQROOT1 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,SQROOT1PROCNEAR XORAX,AX ANDDX,DX JZSQRT2 SQRT1:MOVBX,AX SHLBX,1 INCBX SUBDX,BX JCSQRT2 I

17、NCAX JMPSQRT1 SQRT2:MOVDX,AX RET SQROOT1ENDP,執(zhí)行指令后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X 20:CALLSQROOT1;調(diào)用開(kāi)平方子程序 21:PUSHDX;暫存結(jié)果2X 22:MOVDX,PY;取Y 23:MOVAX,DX;計(jì)算3Y 24:ADDDX,DX 25:ADDDX,AX 26:CALLSQROOT1;調(diào)用開(kāi)平方子程序 27:POPAX;取出2X 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 31:CALLSQRO

18、OT1 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,SQROOT1PROCNEAR XORAX,AX ANDDX,DX JZSQRT2 SQRT1:MOVBX,AX SHLBX,1 INCBX SUBDX,BX JCSQRT2 INCAX JMPSQRT1 SQRT2:MOVDX,AX RET SQROOT1ENDP,執(zhí)行指令RET后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2

19、X 20:CALLSQROOT1;調(diào)用開(kāi)平方子程序 21:PUSHDX;暫存結(jié)果2X 22:MOVDX,PY;取Y 23:MOVAX,DX;計(jì)算3Y 24:ADDDX,DX 25:ADDDX,AX 26:CALLSQROOT1;調(diào)用開(kāi)平方子程序 27:POPAX;取出2X 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 31:CALLSQROOT1 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,

20、SQROOT1PROCNEAR XORAX,AX ANDDX,DX JZSQRT2 SQRT1:MOVBX,AX SHLBX,1 INCBX SUBDX,BX JCSQRT2 INCAX JMPSQRT1 SQRT2:MOVDX,AX RET SQROOT1ENDP,執(zhí)行指令后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X 20:CALLSQROOT1;調(diào)用開(kāi)平方子程序 21:PUSHDX;暫存結(jié)果2X 22:MOVDX,PY;取Y 23:MOVAX,DX;計(jì)算3Y 24:ADDDX,DX 25:ADDDX,AX 26:CALLS

21、QROOT1;調(diào)用開(kāi)平方子程序 27:POPAX;取出2X 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 31:CALLSQROOT1 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,SQROOT1PROCNEAR XORAX,AX ANDDX,DX JZSQRT2 SQRT1:MOVBX,AX SHLBX,1 INCBX SUBDX,BX JCSQRT2 INCAX JMPSQRT1 SQRT

22、2:MOVDX,AX RET SQROOT1ENDP,執(zhí)行指令后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X 20:CALLSQROOT1;調(diào)用開(kāi)平方子程序 21:PUSHDX;暫存結(jié)果2X 22:MOVDX,PY;取Y 23:MOVAX,DX;計(jì)算3Y 24:ADDDX,DX 25:ADDDX,AX 26:CALLSQROOT1;調(diào)用開(kāi)平方子程序 27:POPAX;取出2X 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 31:CALLSQROOT1 32:POPAX;取出中間結(jié)

23、果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,SQROOT1PROCNEAR XORAX,AX ANDDX,DX JZSQRT2 SQRT1:MOVBX,AX SHLBX,1 INCBX SUBDX,BX JCSQRT2 INCAX JMPSQRT1 SQRT2:MOVDX,AX RET SQROOT1ENDP,執(zhí)行指令RET后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X 20:CALLSQROOT1;調(diào)

24、用開(kāi)平方子程序 21:PUSHDX;暫存結(jié)果2X 22:MOVDX,PY;取Y 23:MOVAX,DX;計(jì)算3Y 24:ADDDX,DX 25:ADDDX,AX 26:CALLSQROOT1;調(diào)用開(kāi)平方子程序 27:POPAX;取出2X 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 31:CALLSQROOT1 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,SQROOT1PROCNEAR XO

25、RAX,AX ANDDX,DX JZSQRT2 SQRT1:MOVBX,AX SHLBX,1 INCBX SUBDX,BX JCSQRT2 INCAX JMPSQRT1 SQRT2:MOVDX,AX RET SQROOT1ENDP,執(zhí)行指令后,2.約定存儲(chǔ)單元法,約定存儲(chǔ)單元法傳送參數(shù),與約定寄存器法類似。下面設(shè)計(jì)的開(kāi)平方子程序與調(diào)用程序,約定被開(kāi)方數(shù)放在ARGX單元,計(jì)算結(jié)果放入ROOT單元。 1:;*EXAM8.1.2S* 2:SQROOT2PROCNEAR 3:XORAX,AX;i0 4:ANDDX,DX;測(cè)試被開(kāi)方數(shù) 5:JZSQRT2;被開(kāi)方數(shù)為0 6:SQRT1:MOVBX,AX;

26、形成奇數(shù) 7:SHLBX,1 8:INCBX 9:SUBDX,BX;被開(kāi)方數(shù)減去奇數(shù) 10:JCSQRT2;不夠減 11:INCAX;夠減,i增1 12:JMPSQRT1;繼續(xù) 13:SQRT2:MOVDX,AX 14:RET;返回 15:SQROOT2ENDP,MOV DX,ARGX,MOV ROOT,AX,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X MOV ARGX,DX 20:CALLSQROOT2;調(diào)用開(kāi)平方子程序 21:PUSHROOT;暫存結(jié)果2X 22:MOVDX,PY;取Y 23:MOVAX,DX;計(jì)算3Y 24

27、:ADDDX,DX 25:ADDDX,AX MOV ARGX,DX 26:CALLSQROOT2;調(diào)用開(kāi)平方子程序 27:POPAX;取出2X 28:ADDAX,ROOT;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVARGX,150 31:CALLSQROOT2 32:POPAX;取出中間結(jié)果 33:ADDAX,ROOT;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,SQROOT2PROCNEAR XORAX,AX MOV DX,ARGX ANDDX,DX JZSQRT2 SQRT1

28、:MOVBX,AX SHLBX,1 INCBX SUBDX,BX JCSQRT2 INCAX JMPSQRT1 SQRT2:MOVROOT,AX RET SQROOT2ENDP,3.堆棧法,堆棧法傳送參數(shù)是調(diào)用程序先將參數(shù)壓入堆棧,子程序從堆棧中把參數(shù)取出,進(jìn)行處理,然后把結(jié)果壓入堆棧,調(diào)用程序再?gòu)亩褩V腥〕鼋Y(jié)果。 1:;*EXAM8.1.3S* 2:SQROOT3PROCNEAR 3:INCSP 4:INCSP 5:POPDX 6:XORAX,AX;i0 7:ANDDX,DX;測(cè)試被開(kāi)方數(shù) . . . 13:SQRT2:PUSHAX 14:DECSP 15:DECSP 16:RET;返回 1

29、7:SQROOT3ENDP,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X PUSH DX 20: CALLSQROOT3 22:MOVDX,PY 23:MOVAX,DX 24:ADDDX,DX 25:ADDDX,AX PUSH DX 26: CALLSQROOT3 POPDX 27: POPAX 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 PUSHDX 31:CALLSQROOT3 POPDX 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRL

30、T,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,1:;*EXAM8.1.3S* 2:SQROOT3PROCNEAR 3:INCSP 4:INCSP 5:POPDX 6:XORAX,AX 7:ANDDX,DX. . . 13:SQRT2:PUSHAX 14:DECSP 15:DECSP 16:RET;返回 17:SQROOT3ENDP,初始態(tài)(執(zhí)行指令后),17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X PUSH DX 20: CALLSQROOT3 22:MOVDX,

31、PY 23:MOVAX,DX 24:ADDDX,DX 25:ADDDX,AX PUSH DX 26: CALLSQROOT3 POPDX 27: POPAX 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 PUSHDX 31:CALLSQROOT3 POPDX 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,1:;*EXAM8.1.3S* 2:SQROOT3PROCNEAR 3:INCSP 4:I

32、NCSP 5:POPDX 6:XORAX,AX 7:ANDDX,DX. . . 13:SQRT2:PUSHAX 14:DECSP 15:DECSP 16:RET;返回 17:SQROOT3ENDP,執(zhí)行指令后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X PUSH DX 20: CALLSQROOT3 22:xxyyMOVDX,PY 23:MOVAX,DX 24:ADDDX,DX 25:ADDDX,AX PUSH DX 26: CALLSQROOT3 POPDX 27: POPAX 28:ADDAX,DX;計(jì)算2X+3Y 29:P

33、USHAX;暫存結(jié)果 30:MOVDX,150 PUSHDX 31:CALLSQROOT3 POPDX 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,1:;*EXAM8.1.3S* 2:SQROOT3PROCNEAR 3:INCSP 4:INCSP 5:POPDX 6:XORAX,AX 7:ANDDX,DX. . . 13:SQRT2:PUSHAX 14:DECSP 15:DECSP 16:RET;返回 17:SQROOT3ENDP,執(zhí)行指令

34、后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X PUSH DX 20: CALLSQROOT3 22:xxyyMOVDX,PY 23:MOVAX,DX 24:ADDDX,DX 25:ADDDX,AX PUSH DX 26: CALLSQROOT3 POPDX 27: POPAX 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 PUSHDX 31:CALLSQROOT3 POPDX 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)

35、果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,1:;*EXAM8.1.3S* 2:SQROOT3PROCNEAR 3:INCSP 4:INCSP 5:POPDX 6:XORAX,AX 7:ANDDX,DX. . . 13:SQRT2:PUSHAX 14:DECSP 15:DECSP 16:RET;返回 17:SQROOT3ENDP,執(zhí)行指令后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X PUSH DX 20: CALLSQROOT3 22:xxyyMOVDX,PY 23:MOV

36、AX,DX 24:ADDDX,DX 25:ADDDX,AX PUSH DX 26: CALLSQROOT3 POPDX 27: POPAX 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 PUSHDX 31:CALLSQROOT3 POPDX 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,1:;*EXAM8.1.3S* 2:SQROOT3PROCNEAR 3:INCSP 4:INCSP 5:PO

37、PDX 6:XORAX,AX 7:ANDDX,DX. . . 13:SQRT2:PUSHAX 14:DECSP 15:DECSP 16:RET;返回 17:SQROOT3ENDP,執(zhí)行指令后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X PUSH DX 20: CALLSQROOT3 22:xxyyMOVDX,PY 23:MOVAX,DX 24:ADDDX,DX 25:ADDDX,AX PUSH DX 26: CALLSQROOT3 POPDX 27: POPAX 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)

38、果 30:MOVDX,150 PUSHDX 31:CALLSQROOT3 POPDX 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,1:;*EXAM8.1.3S* 2:SQROOT3PROCNEAR 3:INCSP 4:INCSP 5:POPDX 6:XORAX,AX 7:ANDDX,DX. . . 13:SQRT2:PUSHAX 14:DECSP 15:DECSP 16:RET;返回 17:SQROOT3ENDP,執(zhí)行指令后,17: MOV

39、 SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X PUSH DX 20: CALLSQROOT3 22:xxyyMOVDX,PY 23:MOVAX,DX 24:ADDDX,DX 25:ADDDX,AX PUSH DX 26: CALLSQROOT3 POPDX 27: POPAX 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 PUSHDX 31:CALLSQROOT3 POPDX 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVA

40、H,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,1:;*EXAM8.1.3S* 2:SQROOT3PROCNEAR 3:INCSP 4:INCSP 5:POPDX 6:XORAX,AX 7:ANDDX,DX. . . 13:SQRT2:PUSHAX 14:DECSP 15:DECSP 16:RET;返回 17:SQROOT3ENDP,執(zhí)行指令后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X PUSH DX 20: CALLSQROOT3 22:xxyyMOVDX,PY 23:MOVAX,DX 24:

41、ADDDX,DX 25:ADDDX,AX PUSH DX 26: CALLSQROOT3 POPDX 27: POPAX 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:MOVDX,150 PUSHDX 31:CALLSQROOT3 POPDX 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,1:;*EXAM8.1.3S* 2:SQROOT3PROCNEAR 3:INCSP 4:INCSP 5:POPDX 6:XOR

42、AX,AX 7:ANDDX,DX. . . 13:SQRT2:PUSHAX 14:DECSP 15:DECSP 16:RET;返回 17:SQROOT3ENDP,執(zhí)行指令RET后,17: MOV SP,SIZE STKTOP 18:MOVDX,PX;取X 19:ADDDX,DX;計(jì)算2X PUSH DX 20: CALLSQROOT3 22:XXYYMOVDX,PY 23:MOVAX,DX 24:ADDDX,DX 25:ADDDX,AX PUSH DX 26: CALLSQROOT3 POPDX 27: POPAX 28:ADDAX,DX;計(jì)算2X+3Y 29:PUSHAX;暫存結(jié)果 30:M

43、OVDX,150 PUSHDX 31:CALLSQROOT3 POPDX 32:POPAX;取出中間結(jié)果 33:ADDAX,DX;計(jì)算最終結(jié)果 34:MOVRLT,AX;保存結(jié)果 35:MOVAH,4CH 36:INT21H 37:CSEGENDS 38:ENDMAIN1,1:;*EXAM8.1.3S* 2:SQROOT4PROCNEAR 3:PUSHBP 4:MOVBP,SP 5:MOVDX,BP+4 6:XORAX,AX 7:ANDDX,DX. . . 13:SQRT2:MOV BP+4,AX 14:POPBP 15:RET;返回 16:SQROOT4ENDP,執(zhí)行指令RET后,4.約定參

44、數(shù)地址指針?lè)?當(dāng)要傳送的參數(shù)較多時(shí),用約定地址指針?lè)ǎ凑{(diào)用程序?qū)?shù)存放的地址送入約定的地址指針,然后調(diào)用子程序,子程序從地址指針指出的地址取出所需參數(shù)。當(dāng)返回參數(shù)較多時(shí),可存入內(nèi)存某區(qū)域,然后把其首地址指針?lè)湃爰s定的寄存器中,供調(diào)用程序使用。 例8.2 設(shè)內(nèi)存有三組無(wú)符號(hào)字整數(shù),三組數(shù)據(jù)的首地址分別為L(zhǎng)IST1,LIST2和LIST3,數(shù)據(jù)個(gè)數(shù)分別存放在CNT1,CNT2和CNT3單元。編制程序計(jì)算三組數(shù)據(jù)中最小數(shù)之和并存入SUM開(kāi)始的單元。,求一組數(shù)據(jù)中最小數(shù)據(jù)的子程序,1:;*EXAM8.2S* 2:FMIN PROC NEAR ;求數(shù)組中最小值 3: PUSH SI ;保存數(shù)組首址

45、4: MOV AX,SI ;取第一個(gè)數(shù) 5: DEC CX ;計(jì)數(shù)值減1 6: JZ RETURN ;計(jì)數(shù)值為0,轉(zhuǎn) 7:FMIN2: INC SI ;修改數(shù)組指針 8: INC SI 9: CMP AX,SI ;與下一個(gè)數(shù)比較 10: JB FMIN1 ;AX中數(shù)小,轉(zhuǎn) 11: MOV AX,SI ;小數(shù)取入AX 12:FMIN1: LOOP FMIN2 ;計(jì)數(shù)值減1,不為0轉(zhuǎn) 13:RETURN: POP SI ;恢復(fù)數(shù)組首值 14: RET ;返回 15:FMIN ENDP,1:;*EXAM8.2M* 2:SSEG SEGMENT STACK 3:SKTOP DB 40 DUP(0) 4

46、:SSEG ENDS 5:DSEG SEGMENT 6:LIST1 DW 35,27,165,3,1825,603 7:CNT1 DW 6 8:LIST2 DW 438,121,496,6321,28,17,2,105 9:CNT2 DW 8 10:LIST3 DW 18,5,19,46,3725 11:CNT3 DW 5 12:SUM DW 0 13:DSEG ENDS 14:CSEG SEGMENT 15: ASSUME CS:CSEG,DS:DSEG 16: ASSUME SS:SSEG 17:MAIN: MOV AX,DSEG 18: MOV DS,AX 19: MOV AX,SSEG

47、 20: MOV SS,AX 21: MOV SP,LENGTH SKTOP,22: MOV SI,OFFSET LIST1 23: MOV CX,CNT1 24: CALL FMIN 25: MOV BX,AX 26: MOV SI,OFFSET IST2 27: MOV CX,CNT2 28: CALL FMIN 29: ADD BX,AX 30: MOV SI,OFFSET LIST3 31: MOV CX,CNT3 32: CALL FMIN 33: ADD BX,AX 34: MOV SUM,BX 35: MOV AH,4CH 36: INT 21H 37:CSEG ENDS 38:

48、 END MAIN,子程序設(shè)計(jì)的舉例,例8.3 計(jì)算三組字?jǐn)?shù)據(jù)中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù),并分別存入PCOUNT,MCOUNT和ZCOUNT單元。設(shè)三組數(shù)據(jù)首地址分別ARRY1,ARRY2和ARRY3,數(shù)據(jù)個(gè)數(shù)分別在CNT1,CNT2和CNT3單元存放。 子程序說(shuō)明文件如下: (1) 子程序名(入口標(biāo)號(hào)):PMZN; (2) 子程序功能:求一組數(shù)據(jù)中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù); (3) 入口條件:數(shù)組首地址在SI中;數(shù)組數(shù)據(jù)個(gè)數(shù)在CX中; (4) 出口條件:正數(shù)個(gè)數(shù)在AX中;負(fù)數(shù)個(gè)數(shù)在BX中;零的個(gè)數(shù)在DX中; (5) 受影響的寄存器:AX,BX,DX和標(biāo)志寄存器F。,;* EXAM8.3S* PUBL

49、ICPMZN CSEG SEGMENT ASSUME CS:CSEG PMZN PROC FAR PUSH SI ;保存數(shù)組首址 PUSH CX ;保存數(shù)據(jù)個(gè)數(shù) XOR AX,AX ;清計(jì)數(shù)器 XOR BX,BX XOR DX,DX PMZN0: TEST WORD PTRSI,0FFFFH ;測(cè)試數(shù)據(jù) JS MINUS ;負(fù)轉(zhuǎn) JNZ PLUS ;非0轉(zhuǎn) INC DX ;為0,0計(jì)數(shù)器加1 JMP PMZN1 PLUS: INC AX ;正數(shù)計(jì)數(shù)器加1 JMP PMZN1 MINUS: INC BX ;負(fù)數(shù)計(jì)數(shù)器加1 PMZN1: ADD SI,2 ;指向下一個(gè)數(shù)據(jù) LOOP PMZN0 ;

50、循環(huán)計(jì)數(shù)減1,非0轉(zhuǎn) POP CX ;恢復(fù)CX POP SI ;恢復(fù)SI RET PMZN ENDP CSEG ENDS END,;* EXAM8.3.M* * EXTRN PMZN:FAR SSEG SEGMENT STACK SKTOP DB 50 DUP(0) SSEG ENDS DSEG SEGMENT ARRY1 DW 15,-5,1,5,0,123,964,-327,0 CNT1 DW 9 ARRY2 DW 103,4,-8,-23,0,827,-936,0,0,18 CNT2 DW 10 ARRY3 DW -29,-137,-23,0,4,0 CNT3 DW 6 PCOUNT D

51、W 0 ;保存結(jié)果單元 MCOUNT DW 0 ZCOUNT DW 0 ADR DW OFFSET ARRY1,OFFSET CNT1 DW OFFSET ARRY2,OFFSET CNT2 DW OFFSET ARRY3,OFFSET CNT3 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG ASSUME SS:SSEG START: MOV AX,DSEG MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP,LENGTH SKTOP,LEA DI,ADR MOV CX,03 AGAIN: MOV SI,DI ;取數(shù)組首址

52、SI MOV BX,DI+2;取數(shù)組數(shù)據(jù)個(gè)數(shù)首址 PUSH CX ;保存CX中的循環(huán)計(jì)數(shù)值 MOV CX,BX ;取數(shù)組數(shù)據(jù)個(gè)數(shù)CX CALL FAR PTR PMZN ADD PCOUNT,AX ;累加結(jié)果 ADD MCOUNT,BX ADD ZCOUNT,DX ADD DI,4 ;修改指針指向下一數(shù)組 POP CX ;恢復(fù)CX中循環(huán)計(jì)數(shù) LOOP AGAIN ;CX計(jì)數(shù)值減1,非0轉(zhuǎn) MOV AH,4CH INT 21H CSEG END END START,8.5子程序嵌套,我們編制子程序時(shí),如果用到已有的某種功能的子程序,也可以采用調(diào)用的方法,在一個(gè)子程序的內(nèi)部再調(diào)用其它子程序,稱為子

53、程序嵌套。這樣的子程序稱為嵌套子程 序。嵌套子程序的層數(shù)稱為嵌套深度,一般設(shè)有硬件堆棧的計(jì)算機(jī),嵌套深度只受堆棧區(qū)大小的限制。,假設(shè)我們已經(jīng)有一個(gè)子程序,其說(shuō)明文件和程序清單如下: (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。 程序清單如下: ;*EXAM 8.4S3 * HTOAPROCNEAR AND AL,0FH CMP AL,10 JC HTOA1 ADD AL,07 HTOA1:ADD AL,30H RE

54、T HTOA ENDP,(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。 ;*EXAM8.4S2* BHTOAPROC PUSH CX MOV CH,AL MOV CL,04 SHR AL,CL CALL HTOA MOV AH,AL MOV AL,CH CALL HTOA POP CX RET BHTOA ENDP,假定在內(nèi)存DATA單元存放著一個(gè)無(wú)符號(hào)的字節(jié)數(shù)據(jù),將

55、它在屏幕上顯示出來(lái)。 DSEGSEGMENT DATADB4CH DSEGENDS CSEGSEGMENT ASSUMECS:CSEG,DS:DSEG START:MOVAX,DSEG MOVDS,AX MOVAL,DATA CALLBHTOA PUSHAX MOVDL,AH MOVAH,2 INT21H POPDX INT21H MOVAX,4C00H INT21H CSEGENDS ENDSTART,8.6遞歸子程序,子程序能直接或間地調(diào)用自身稱為遞歸調(diào)用,具有遞歸調(diào)用性質(zhì)的子程序稱為遞歸子程序。遞歸子程序一般用于解遞歸函數(shù),遞歸函數(shù)定義具有下述兩個(gè)組成部分: 1.遞歸函數(shù)的遞歸過(guò)程必須是

56、有限的。即每個(gè)遞歸函數(shù)有一個(gè)非遞歸終值,遞歸過(guò)程(子程序)一旦求得該值,就結(jié)束遞歸。 2.任一函數(shù)項(xiàng)的值都有明確的定義,其值可由函數(shù)中的一項(xiàng)或幾項(xiàng)值求得。 舉例:階乘函數(shù),對(duì)于任一個(gè)大于等于0的正整數(shù)N,其函數(shù)值定義為: 1 (N=0) FACT(N)= N*FACT(N-1) (N0),算 法,(1)測(cè)試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:;* EXAM8.5S* 2:FACT PROC NEAR 3: AND

57、 BX,BX 4: JZ FACT1 5: PUSH BX 6: DEC BX 7: CALL FACT 8:F: POP BX 9: MUL BX 10: RET 11:FACT1: MOV AX,1 12: RET 13:FACT ENDP,舉例:求4!,SSEGSEGMENT SKTOPDB20H DUP (0) SSEGENDS CSEGSEGMENT ASSUME CS:CSEG FACTPROCNEAR AND BX,BX JZ FACT1 PUSH BX DEC BX CALL FACT aabb POP BX MUL BX RET FACT1: MOV AX,1 RET FAC

58、T ENDP MIAN:MOVAX,SSEG MOVDS,AX MOVSP,SIZE SKTOP MOVBX,4 CALLFACT xxyyNOP CSEGENDS ENDMAIN,執(zhí)行指令后,舉例:求4!,SSEGSEGMENT SKTOPDB20H DUP (0) SSEGENDS CSEGSEGMENT ASSUME CS:CSEG FACTPROCNEAR AND BX,BX JZ FACT1 PUSH BX DEC BX CALL FACT aabb POP BX MUL BX RET FACT1: MOV AX,1 RET FACT ENDP MIAN:MOVAX,SSEG MOV

59、DS,AX MOVSP,SIZE SKTOP MOVBX,4 CALLFACT xxyyNOP CSEGENDS ENDMAIN,執(zhí)行指令后,BX=4 AX=? SP=1EH,舉例:求4!,SSEGSEGMENT SKTOPDB20H DUP (0) SSEGENDS CSEGSEGMENT ASSUME CS:CSEG FACTPROCNEAR AND BX,BX JZ FACT1 PUSH BX DEC BX CALL FACT aabb POP BX MUL BX RET FACT1: MOV AX,1 RET FACT ENDP MIAN:MOVAX,SSEG MOVDS,AX MOV

60、SP,SIZE SKTOP MOVBX,4 CALLFACT xxyyNOP CSEGENDS ENDMAIN,執(zhí)行指令后,BX=4 AX=? SP=1CH,舉例:求4!,SSEGSEGMENT SKTOPDB20H DUP (0) SSEGENDS CSEGSEGMENT ASSUME CS:CSEG FACTPROCNEAR AND BX,BX JZ FACT1 PUSH BX DEC BX CALL FACT aabb POP BX MUL BX RET FACT1: MOV AX,1 RET FACT ENDP MIAN:MOVAX,SSEG MOVDS,AX MOVSP,SIZE S

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論