版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第 5 5 章章教學(xué)重點(diǎn)在掌握基本的匯編語言程序在掌握基本的匯編語言程序設(shè)計(jì)方法之后,進(jìn)一步學(xué)習(xí)設(shè)計(jì)方法之后,進(jìn)一步學(xué)習(xí)如何提高編程效率的各種實(shí)如何提高編程效率的各種實(shí)用方法:用方法:高級語言特性高級語言特性宏結(jié)構(gòu)宏結(jié)構(gòu)模塊化模塊化第 5 章5.1 高級語言特性MASM 6.0引入高級語言的程序設(shè)計(jì)引入高級語言的程序設(shè)計(jì)特性特性n條件控制偽指令條件控制偽指令.IF .ELSE .ENDIFn循環(huán)控制偽指令循環(huán)控制偽指令.WHILE .ENDW .REPEAT .UNTILn過程聲明和過程調(diào)用偽指令過程聲明和過程調(diào)用偽指令.PROTO .INVOKE第 5 章5.1.1 條件控制偽指令 類似高
2、級語言中類似高級語言中IF、THEN、ELSE和和ENDIF的相應(yīng)功能的相應(yīng)功能在匯編時(shí)要展開,自動(dòng)生成相應(yīng)的比較和條在匯編時(shí)要展開,自動(dòng)生成相應(yīng)的比較和條件轉(zhuǎn)移指令序列,實(shí)現(xiàn)程序分支件轉(zhuǎn)移指令序列,實(shí)現(xiàn)程序分支.IF 條件表達(dá)式條件表達(dá)式;條件為真(值為非條件為真(值為非0) 分支體分支體;執(zhí)行分支體執(zhí)行分支體 .ELSE;前面前面IF條件為假條件為假 分支體分支體;執(zhí)行分支體執(zhí)行分支體 .ENDIF;分支結(jié)束分支結(jié)束條件條件表達(dá)式中的操作符 操作符操作符功能功能操作符操作符功能功能操作符操作符功能功能=等于等于&邏輯與邏輯與CARRY?CF=1?!=不等于不等于|邏輯或邏輯或 OV
3、ERFLOW? OF=1?大于大于!邏輯非邏輯非PARITY?PF=1?=大于等于大于等于SIGN?SF=1?小于小于&位測試位測試ZERO?ZF=1?=小于等于小于等于()()改變優(yōu)改變優(yōu)先級先級第 5 章;單分支結(jié)構(gòu)單分支結(jié)構(gòu).IF AX = ax;比較二者大小比較二者大小 mov tag,1;第一分支體:條件滿足,第一分支體:條件滿足,tag1.else mov tag,0;第二分支體:條件不滿足,第二分支體:條件不滿足,tag0.endif.exit 0例5.12/2第 5 章5.1.2 循環(huán)控制偽指令 WHILE結(jié)構(gòu)結(jié)構(gòu)的循環(huán)控制偽指令的循環(huán)控制偽指令.WHILE 條件表達(dá)式
4、條件表達(dá)式;條件為真條件為真 循環(huán)體循環(huán)體;執(zhí)行循環(huán)體執(zhí)行循環(huán)體.ENDW;循環(huán)體結(jié)束循環(huán)體結(jié)束UNTIL結(jié)構(gòu)結(jié)構(gòu)的循環(huán)控制偽指令的循環(huán)控制偽指令.REPEAT;重復(fù)執(zhí)行循環(huán)體重復(fù)執(zhí)行循環(huán)體 循環(huán)體循環(huán)體.UNTIL 條件表達(dá)式條件表達(dá)式;直到條件為直到條件為真真WHILE循環(huán)結(jié)構(gòu)的流程圖 第 5 章UNTIL循環(huán)結(jié)構(gòu)的流程圖 第 5 章;WHILE結(jié)構(gòu)結(jié)構(gòu)xor ax, axmov cx,100.while cx!=0 add ax,cx dec cx.endwmov sum,ax求1100之和;UNTIL結(jié)構(gòu)結(jié)構(gòu)xor ax, axmov cx,100.repeat add ax,cx d
5、ec cx.until cx=0mov sum,axmov cx,100 xor ax,axlea bx,array.repeat .if sword ptr bx = 0 add ax,bx .else .break .endif inc bx inc bx.untilcxzmov result,ax例5.2第 5 章要調(diào)用帶參數(shù)過程定義的過程,不應(yīng)采用要調(diào)用帶參數(shù)過程定義的過程,不應(yīng)采用CALL指令,因?yàn)楸容^煩瑣指令,因?yàn)楸容^煩瑣應(yīng)該采用過程調(diào)用偽指令應(yīng)該采用過程調(diào)用偽指令I(lǐng)NVOKE使用使用INVOKE偽指令的前提是需要用偽指令的前提是需要用PROTO偽指令對過程進(jìn)行聲明偽指令對過程進(jìn)行
6、聲明5.1.3 過程聲明和過程調(diào)用偽指令過程名過程名 PROC調(diào)用距離調(diào)用距離 語言類型語言類型 作用范圍作用范圍 USES 寄存器列表寄存器列表, 參數(shù)參數(shù):類型類型LOCAL 參數(shù)表參數(shù)表;匯編語言語句匯編語言語句過程名過程名 ENDP過程聲明偽指令:過程聲明偽指令:用于事先聲明過程的結(jié)構(gòu)用于事先聲明過程的結(jié)構(gòu)過程名過程名PROTO 調(diào)用距離調(diào)用距離 語言類型語言類型, 參數(shù)參數(shù):類型類型過程調(diào)用偽指令過程調(diào)用偽指令I(lǐng)NVOKE 過程名過程名,參數(shù)參數(shù),.如何調(diào)如何調(diào)用用;匯編語言程序:匯編語言程序:lt503.asm.model smallchecksumd PROTO c,:word,
7、:word;聲明過程聲明過程.stack.dataarraydb 12h,25h,0f0h,0a3h,3db 68h,71h,0cah,0ffh,90hcountequ $-array;數(shù)組的元素個(gè)數(shù)數(shù)組的元素個(gè)數(shù)resultdb ?;校驗(yàn)和校驗(yàn)和.code.startupINVOKE checksumd,count,offset array;調(diào)用過程調(diào)用過程mov result,al;保存校驗(yàn)和保存校驗(yàn)和.exit 0例5.31/2列表文件checksumd PROC c USES bx cx,countp:word,arrayp:wordmov bx,arrayp;BX數(shù)組的偏移地址數(shù)組的
8、偏移地址mov cx,countp;CX數(shù)組的元素個(gè)數(shù)數(shù)組的元素個(gè)數(shù)xor al,alsumd: add al,bx;求和:求和:ALAL+DS:BXinc bxloop sumdretchecksumd endpend例5.32/2列表文件;lt503.asm的列表文件(的列表文件(lt503.lst).INVOKE checksumd,count,offset array *mov ax,word ptr OFFSET array *push ax *mov ax,+000Ah *push ax *call checksumd *add sp,04hmov result,al.例5.31/
9、2指示該語句由匯編程序自動(dòng)生成指示該語句由匯編程序自動(dòng)生成checksumd PROC c USES bx cx,countp:word,arrayp:word *push bp;起始代碼起始代碼 *mov bp,sp *push bx;保護(hù)保護(hù)bx和和cx *push cxmov bx,arrayp;arrayp=BP+6mov cx,countp;countp=BP+4.ret *pop cx;結(jié)尾代碼結(jié)尾代碼 *pop bx *pop bp *ret 0000hchecksumc endp例5.32/2進(jìn)入調(diào)試程序觀察進(jìn)入調(diào)試程序觀察第 5 章5.2 宏結(jié)構(gòu)程序設(shè)計(jì)宏匯編宏匯編重復(fù)匯編重
10、復(fù)匯編條件匯編條件匯編統(tǒng)稱宏結(jié)構(gòu)統(tǒng)稱宏結(jié)構(gòu)宏(Macro)是匯編語言的一個(gè)特點(diǎn),它是與子程序類似又獨(dú)具特色的另一種簡化源程序的方法第 5 章宏宏具有宏名的一段匯編語句序列具有宏名的一段匯編語句序列宏定義宏定義時(shí)書寫時(shí)書寫宏指令宏指令這段匯編語句序列的縮寫這段匯編語句序列的縮寫宏調(diào)用宏調(diào)用時(shí)書寫時(shí)書寫宏展開宏展開宏指令處用這段宏代替的過宏指令處用這段宏代替的過程程宏匯編宏匯編時(shí)實(shí)現(xiàn)時(shí)實(shí)現(xiàn)宏的參數(shù)宏的參數(shù)功能強(qiáng)大,頗具特色功能強(qiáng)大,頗具特色配合宏,還有配合宏,還有宏操作符宏操作符和有關(guān)偽指令和有關(guān)偽指令5.2.1 宏匯編宏定義宏定義宏名宏名 macromacro 形參表形參表 宏定義體宏定義體en
11、dmendmmainbeginmainbeginMACROMACRO ;定義名為定義名為mainbeginmainbegin的宏,無參數(shù)的宏,無參數(shù)movmov ax,data ax,data;宏定義體宏定義體mov ds,axmov ds,axENDMENDM;宏定義結(jié)束宏定義結(jié)束mainendmainendMACRO retnumMACRO retnum;帶有形參帶有形參retnumretnummov al,retnummov al,retnum;宏定義中使用參數(shù)宏定義中使用參數(shù)movmov ah,4ch ah,4chintint 21h 21hENDMENDM宏注釋符宏注釋符宏調(diào)用宏調(diào)用
12、宏名宏名 實(shí)參表實(shí)參表 start:start: mainbeginmainbegin; ;宏調(diào)用,建立宏調(diào)用,建立DSDS內(nèi)容內(nèi)容dispmsgdispmsg string string; ;宏調(diào)用,顯示字符串宏調(diào)用,顯示字符串mainendmainend 0 0; ;宏調(diào)用,返回宏調(diào)用,返回DOSDOSend startend start 宏調(diào)用的實(shí)質(zhì)是在匯編過程中進(jìn)行宏展開宏調(diào)用的實(shí)質(zhì)是在匯編過程中進(jìn)行宏展開 宏展開的具體過程是:當(dāng)匯編程序掃描源程序遇宏展開的具體過程是:當(dāng)匯編程序掃描源程序遇到已有定義的宏調(diào)用時(shí),即用相應(yīng)的宏定義體取代到已有定義的宏調(diào)用時(shí),即用相應(yīng)的宏定義體取代源程序的
13、宏指令,同時(shí)用位置匹配的實(shí)參對形參進(jìn)源程序的宏指令,同時(shí)用位置匹配的實(shí)參對形參進(jìn)行取代行取代宏展開宏展開宏展開宏展開在匯編時(shí),用宏定義在匯編時(shí),用宏定義體的代碼序列替代宏指令的過程。體的代碼序列替代宏指令的過程。start:start: mainbeginmainbegin; ;宏指令宏指令 1 1movmov ax,data ax,data ; ;宏展開宏展開 1 1mov ds,axmov ds,axmainendmainend 0 0; ;宏指令宏指令 1 1movmov al,0 al,0; ;宏展開宏展開 1 1movmov ah,4ch ah,4ch 1 1intint 21h 2
14、1h宏的參數(shù)宏的參數(shù)宏的參數(shù)使用非常靈活宏的參數(shù)使用非常靈活宏定義時(shí),宏定義時(shí),可以可以無參數(shù)無參數(shù),例如,例如5.4a的的mainbegin可以帶有可以帶有一個(gè)參數(shù)一個(gè)參數(shù),例如,例如5.4a的的mainend也可以具有也可以具有多個(gè)參數(shù)多個(gè)參數(shù);例如;例如5.5a的的shlext參數(shù)可以是參數(shù)可以是常數(shù)、變量、存儲(chǔ)單元、指令常數(shù)、變量、存儲(chǔ)單元、指令(操(操作碼)或它們的一部分,也可以是作碼)或它們的一部分,也可以是表達(dá)式表達(dá)式;例如;例如5.5b的的shift和和shrot宏定義體可以是任何合法的匯編語句,既可以宏定義體可以是任何合法的匯編語句,既可以是是硬指令序列硬指令序列,又可以是,
15、又可以是偽指令序列偽指令序列;例如;例如5.6的的dstring;宏定義;宏定義shlextshlextmacro macro shloprandshloprand, ,shlnumshlnumpush cxpush cxmov cl,mov cl,shlnumshlnumshlshl shloprandshloprand,cl,clpop cxpop cxendmendm;宏指令;宏指令shlextshlext axax, ,6 6;宏展開;宏展開 1 1push cxpush cx 1 1movmov cl, cl,0606 1 1shlshl axax,cl,cl 1 1pop cxpo
16、p cx例5.5a;統(tǒng)一;統(tǒng)一4 4條移位指令的宏指令條移位指令的宏指令shiftshiftmacro soprand,snum,macro soprand,snum,sopcodesopcodepush cxpush cxmov cl,snummov cl,snums s& &sopcodesopcode& & soprand,cl soprand,clpop cxpop cxendmendm;統(tǒng)一移位和循環(huán)移位;統(tǒng)一移位和循環(huán)移位8 8條指令的宏指令條指令的宏指令shrotshrotmacro sroprand,srnum,macro sroprand,sr
17、num,sropcodesropcodepush cxpush cxmov cl,srnummov cl,srnumsropcodesropcode sroprand,cl sroprand,clpop cxpop cxendmendm例5.5b替換操作符替換操作符;宏定義;宏定義dstringdstring macro stringmacro stringdb db & &stringstring& &,0dh,0ah,$,0dh,0ah,$endmendm;宏調(diào)用;宏調(diào)用dstringdstring dstringdstring 0 0 ! ! Number
18、 Number ! !;宏展開;宏展開 1 1db This is a example., 0dh,0ah,$db This is a example., 0dh,0ah,$ 1 1db db 0 Number 100 Number 10, 0dh,0ah, , 0dh,0ah, $ $例5.6轉(zhuǎn)義注釋符轉(zhuǎn)義注釋符傳遞注釋符傳遞注釋符宏操作符;宏注釋符,用于表示在宏定宏注釋符,用于表示在宏定義中的注釋。采用這個(gè)符號的注義中的注釋。采用這個(gè)符號的注釋,在宏展開時(shí)不出現(xiàn)釋,在宏展開時(shí)不出現(xiàn)&替換操作符,用于將參數(shù)與替換操作符,用于將參數(shù)與其他字符分開。如果參數(shù)緊接在其他字符分開。如果參數(shù)緊
19、接在其他字符之前或之后,或者參數(shù)其他字符之前或之后,或者參數(shù)出現(xiàn)在帶引號的字符串中,就必出現(xiàn)在帶引號的字符串中,就必須使用該偽操作符須使用該偽操作符第 5 章宏操作符字符串傳遞操作符,用于括起字符字符串傳遞操作符,用于括起字符串。在宏調(diào)用中,如果傳遞的字符串實(shí)參數(shù)串。在宏調(diào)用中,如果傳遞的字符串實(shí)參數(shù)含有逗號、空格等間隔符號,則必須用這對含有逗號、空格等間隔符號,則必須用這對操作符,以保證字符串的完整操作符,以保證字符串的完整!轉(zhuǎn)義操作符,用于指示其后的一個(gè)字轉(zhuǎn)義操作符,用于指示其后的一個(gè)字符作為一般字符,不含特殊意義符作為一般字符,不含特殊意義%表達(dá)式操作符,用在宏調(diào)用中,表示表達(dá)式操作符,
20、用在宏調(diào)用中,表示將后跟的一個(gè)表達(dá)式的值作為實(shí)參,而不是將后跟的一個(gè)表達(dá)式的值作為實(shí)參,而不是將表達(dá)式本身作為參數(shù)將表達(dá)式本身作為參數(shù)第 5 章第 5 章與宏有關(guān)的偽指令局部標(biāo)號偽指令局部標(biāo)號偽指令LOCAL 標(biāo)號列表標(biāo)號列表宏定義體采用了標(biāo)號,應(yīng)使用宏定義體采用了標(biāo)號,應(yīng)使用LOCAL加以說明加以說明它必須是宏定義它必須是宏定義MACRO語句之后的第一條語句語句之后的第一條語句宏定義刪除偽指令宏定義刪除偽指令PURGE PURGE 宏名表宏名表不需要某個(gè)宏定義時(shí),可以把它刪除不需要某個(gè)宏定義時(shí),可以把它刪除宏定義退出偽指令宏定義退出偽指令EXITMEXITM偽指令偽指令EXITMEXITM表
21、示結(jié)束當(dāng)前宏調(diào)用的展開表示結(jié)束當(dāng)前宏調(diào)用的展開;宏定義;宏定義absolabsol macro oprdmacro oprdlocal nextlocal nextcmpcmp oprd,0 oprd,0jgejge next nextneg oprdneg oprdnext:next:endmendm例5.7;宏調(diào)用;宏調(diào)用absolabsol word ptr word ptr bx bx absolabsol bx bx;宏展開;宏展開 1 1cmpcmp word ptr word ptr bx,0 bx,0 1 1jgejge ?0000 ?0000 1 1negneg word p
22、tr word ptr bx bx 1 1?0000:?0000: 1 1cmpcmp bx,0 bx,0 1 1jgejge ?0001 ?0001 1 1negneg bx bx 1 1?0001:?0001:單獨(dú)占一行單獨(dú)占一行比較僅是僅是源程序級源程序級的的簡化簡化:宏調(diào)用宏調(diào)用在匯編時(shí)在匯編時(shí)進(jìn)行進(jìn)行程序語句的展開,不程序語句的展開,不需要返回;不減小目需要返回;不減小目標(biāo)程序,執(zhí)行速度沒標(biāo)程序,執(zhí)行速度沒有改變有改變通過形參、實(shí)參結(jié)合通過形參、實(shí)參結(jié)合實(shí)現(xiàn)參數(shù)傳遞,簡捷實(shí)現(xiàn)參數(shù)傳遞,簡捷直觀、靈活多變直觀、靈活多變還是還是目標(biāo)程序級目標(biāo)程序級的的簡簡化化:子程序調(diào)用:子程序調(diào)用在執(zhí)
23、在執(zhí)行時(shí)行時(shí)由由CALLCALL指令轉(zhuǎn)向、指令轉(zhuǎn)向、RETRET指令返回;形成的指令返回;形成的目標(biāo)代碼較短,執(zhí)行目標(biāo)代碼較短,執(zhí)行速度減慢速度減慢需要利用寄存器、存需要利用寄存器、存儲(chǔ)單元或堆棧等傳遞儲(chǔ)單元或堆棧等傳遞參數(shù)參數(shù)宏宏子程序子程序宏與子程序具有各自的特點(diǎn),程序員應(yīng)該宏與子程序具有各自的特點(diǎn),程序員應(yīng)該根據(jù)具體問題選擇使用那種方法根據(jù)具體問題選擇使用那種方法通常,當(dāng)程序段較短或要求較快執(zhí)行時(shí),通常,當(dāng)程序段較短或要求較快執(zhí)行時(shí),應(yīng)選用宏;當(dāng)程序段較長或?yàn)闇p小目標(biāo)代碼應(yīng)選用宏;當(dāng)程序段較長或?yàn)闇p小目標(biāo)代碼時(shí),要選用子程序時(shí),要選用子程序比較結(jié)論宏宏子程序子程序第 5 章5.2.2 重
24、復(fù)匯編重復(fù)匯編重復(fù)匯編指在匯編過程中,重復(fù)展開一指在匯編過程中,重復(fù)展開一段(基本)相同的語句段(基本)相同的語句重復(fù)匯編沒有名字,不能被調(diào)用重復(fù)匯編沒有名字,不能被調(diào)用重復(fù)匯編常用在宏定義體中,也可以在重復(fù)匯編常用在宏定義體中,也可以在一般匯編語句中使用一般匯編語句中使用重復(fù)匯編偽指令有三個(gè):重復(fù)匯編偽指令有三個(gè):REPEAT按參數(shù)值重復(fù)按參數(shù)值重復(fù)FOR按參數(shù)個(gè)數(shù)重復(fù)按參數(shù)個(gè)數(shù)重復(fù)FORC按參數(shù)的字符個(gè)數(shù)重復(fù)按參數(shù)的字符個(gè)數(shù)重復(fù)最后,用最后,用ENDM結(jié)束結(jié)束按參數(shù)值重復(fù)按參數(shù)值重復(fù)REPEATREPEAT 重復(fù)次數(shù)重復(fù)次數(shù) 重復(fù)體重復(fù)體ENDMENDMchar = Achar = ARE
25、PEAT 26REPEAT 26 db char db char char = char +1 char = char +1ENDMENDM 1 1db chardb char; ;等效于等效于db Adb A 1 1char = char +1char = char +1 1 1db chardb char; ;等效于等效于db Bdb B 1 1char = char +1char = char +1. 1 1db chardb char; ;等效于等效于db Zdb Z 1 1char = char +1char = char +1按參數(shù)個(gè)數(shù)重復(fù)按參數(shù)個(gè)數(shù)重復(fù)FORFOR 形參形參, ,
26、實(shí)參表實(shí)參表 重復(fù)體重復(fù)體ENDMENDMFOR regadFOR regad, ax,bx,cx,dx, push regad push regadENDMENDM 1 1push axpush ax 1 1push bxpush bx 1 1push cxpush cx 1 1push dxpush dx按參數(shù)字符個(gè)數(shù)重復(fù)按參數(shù)字符個(gè)數(shù)重復(fù)FORCFORC 形參形參, , 字符串字符串 重復(fù)體重復(fù)體ENDMENDMFORC regad,dcbaFORC regad,dcba pop ®ad&x pop ®ad&xENDMENDM 1 1pop d
27、xpop dx 1 1pop cxpop cx 1 1pop bxpop bx 1 1pop axpop ax第 5 章5.2.3 條件匯編條件匯編偽指令在匯編過程中,根條件匯編偽指令在匯編過程中,根據(jù)條件決定匯編的語句據(jù)條件決定匯編的語句IFxx 表達(dá)式表達(dá)式;滿足,匯編分支語句體滿足,匯編分支語句體1分支語句體分支語句體1 ELSE;不滿足,匯編分支語句體不滿足,匯編分支語句體2分支語句體分支語句體2 ENDIF;條件匯編結(jié)束條件匯編結(jié)束pdatapdatamacro nummacro num IFIF num lt num lt 100 100;如果如果num 100num 100,則匯
28、編如下語句,則匯編如下語句db num dup (?)db num dup (?) ELSEELSE;否則,匯編如下語句否則,匯編如下語句db 100 dup (?)db 100 dup (?) ENDIFENDIFendmendmpdatapdata 12 12 ; ;宏調(diào)用宏調(diào)用db 12 dup(?)db 12 dup(?) ; ;宏匯編結(jié)果宏匯編結(jié)果pdatapdata 102 102 ; ;宏調(diào)用宏調(diào)用db 100 dup(?)db 100 dup(?) ; ;宏匯編結(jié)果宏匯編結(jié)果例5.10宏結(jié)構(gòu)的作用宏匯編、重復(fù)匯編和條件匯編宏匯編、重復(fù)匯編和條件匯編為源程序的編寫提供了很多方便,
29、為源程序的編寫提供了很多方便,靈活運(yùn)用它們可以編寫出非常靈活運(yùn)用它們可以編寫出非常良好的源程序來良好的源程序來匯編系統(tǒng)中有些以圓點(diǎn)起始的匯編系統(tǒng)中有些以圓點(diǎn)起始的 偽指令(如偽指令(如.startup、.exit等)等)實(shí)際上是一種宏結(jié)構(gòu)實(shí)際上是一種宏結(jié)構(gòu)dstringdstringMACRO stringMACRO string;定義字符串定義字符串db &string&,0dh,0ah,$db &string&,0dh,0ah,$ENDMENDMmainbeginmainbeginMACRO dssegMACRO dsseg;設(shè)置數(shù)據(jù)段地址設(shè)置數(shù)據(jù)段地址mo
30、v ax,dssegmov ax,dssegmov ds,axmov ds,axENDMENDMdispmsgdispmsgMACRO messageMACRO messagemov dx,offsetmov dx,offset message messagemovmov ah,09h ah,09hintint 21h 21hENDMENDM例題5.41/3mainendmainend MACRO retnumMACRO retnum;返回返回DOSDOS,可不帶參數(shù),可不帶參數(shù)ifb retnumifb mov mov ah,4ch ah,4ch;沒有參數(shù)沒有參數(shù)elseelse mov m
31、ov ax,4c00h+(retnum AND 0ffh) ax,4c00h+(retnum AND 0ffh); ; 有參數(shù)有參數(shù)endifendifintint 21h 21hENDMENDM例題5.42/3.model small.model small.stack 256.stack 256.data.datamsg1msg1equequ this byte this bytedstringdstring Hello,Everybody !msg2msg2equequ this byte this bytedstringdstring You see,I made it.code.co
32、destart:start:mainbeginmainbegin data data; ;建立建立DSDS內(nèi)容內(nèi)容dispmsgdispmsg msg1 msg1; ;顯示顯示msg1msg1字符串字符串dispmsgdispmsg msg2 msg2; ;顯示顯示msg2msg2字符串字符串mainendmainend; ;返回返回DOSDOSend startend start例題5.43/3將程序分段、采用子程序或宏結(jié)構(gòu)都將程序分段、采用子程序或宏結(jié)構(gòu)都是進(jìn)行模塊化程序設(shè)計(jì)是進(jìn)行模塊化程序設(shè)計(jì)介紹開發(fā)大型程序時(shí)采用的方法:介紹開發(fā)大型程序時(shí)采用的方法:源程序文件的包含目標(biāo)模塊連接子程序庫
33、5.3 模塊化程序設(shè)計(jì)例題例題 5.125.12將鍵盤輸入的數(shù)據(jù)按升序輸出將鍵盤輸入的數(shù)據(jù)按升序輸出把源程序分放在幾個(gè)文本文件中,在匯編時(shí)把源程序分放在幾個(gè)文本文件中,在匯編時(shí)通過包含偽指令通過包含偽指令I(lǐng)NCLUDE結(jié)合成一體結(jié)合成一體INCLUDE 文件名文件名可將常用的子程序形成可將常用的子程序形成.ASM.ASM匯編語言源文件匯編語言源文件可將常用的宏定義存放在可將常用的宏定義存放在.MAC.MAC宏庫文件中宏庫文件中可將常量定義、聲明語句組織在可將常量定義、聲明語句組織在.INC.INC包含文件中包含文件中例例5.12a5.12a 宏庫文件宏庫文件 lt512a.mac 主程序文件主
34、程序文件 lt512a.asm 子程序文件子程序文件 sub512a.asm5.3.1 源程序文件的包含1dispchardispcharmacro charmacro char; ;顯示顯示charchar字符字符movmov dl,char dl,charmovmov ah,2 ah,2intint 21h 21hendmendmdispmsgdispmsgmacro messagemacro message; ;顯示顯示messagemessage字符串字符串mov dx,offsetmov dx,offset message messagemovmov ah,9 ah,9intint
35、21h 21hendmendmLt512a.macinclude lt512a.macinclude lt512a.mac.dispmsgdispmsg msg1 msg1; ;提示輸入數(shù)據(jù)提示輸入數(shù)據(jù)mov bx,offset bufmov bx,offset bufcall inputcall input; ;數(shù)據(jù)輸入數(shù)據(jù)輸入cmpcmp cx,0 cx,0jeje start4 start4; ;沒有輸入數(shù)據(jù)則退出沒有輸入數(shù)據(jù)則退出mov count,cxmov count,cx.; ;顯示輸入的數(shù)據(jù)顯示輸入的數(shù)據(jù).; ;數(shù)據(jù)排序數(shù)據(jù)排序.; ;顯示經(jīng)排序后的數(shù)據(jù)顯示經(jīng)排序后的數(shù)據(jù)sta
36、rt4:start4: .exit 0.exit 0include sub512a.asminclude sub512a.asmendendLt512a.asm子程序源文件有子程序源文件有3 3個(gè)子程序個(gè)子程序ALdispALdisp; ;顯示顯示2 2位位1616進(jìn)制數(shù)子程序(例進(jìn)制數(shù)子程序(例4.104.10)sortingsorting ; ;排序子程序(例排序子程序(例4.84.8)inputinput; ;鍵盤輸入子程序鍵盤輸入子程序還包含一個(gè)宏還包含一個(gè)宏convertconvert ;將將DXDX兩位兩位ASCIIASCII碼轉(zhuǎn)換為兩位碼轉(zhuǎn)換為兩位1616進(jìn)制數(shù)進(jìn)制數(shù)sub512
37、a.asm讓我們重點(diǎn)分析鍵盤輸入子程序讓我們重點(diǎn)分析鍵盤輸入子程序 inputinput; ;鍵盤輸入子程序鍵盤輸入子程序; ;入口參數(shù):入口參數(shù):ds:bxds:bx= =存放數(shù)據(jù)的緩沖區(qū)存放數(shù)據(jù)的緩沖區(qū); ;出口參數(shù):出口參數(shù):cxcx= =數(shù)據(jù)個(gè)數(shù)數(shù)據(jù)個(gè)數(shù)inputinputprocprocpush axpush axpush dxpush dxxor cx,cxxor cx,cx; ;數(shù)據(jù)個(gè)數(shù)清數(shù)據(jù)個(gè)數(shù)清0 0input01:input01: xor dx,dxxor dx,dx; ;輸入字符清輸入字符清0 0input02:input02: movmov ah,1 ah,1; ;鍵盤
38、輸入一個(gè)字符鍵盤輸入一個(gè)字符intint 21h 21hinput之一繼續(xù):繼續(xù):inputinput之二之二input10:input10: cmpcmp al,0dh al,0dhjeje input30 input30; ;是是回車回車,結(jié)束整個(gè)數(shù)據(jù)的輸入,結(jié)束整個(gè)數(shù)據(jù)的輸入cmpcmp al, al, jeje input20 input20; ;是是空格和逗號空格和逗號,確認(rèn)輸入了一個(gè)數(shù)據(jù),確認(rèn)輸入了一個(gè)數(shù)據(jù)cmpcmp al, al,jeje input20 input20cmpcmp al,08h al,08hjeje input17 input17; ;是是退格退格,丟棄本次輸
39、入的數(shù)據(jù),出錯(cuò),丟棄本次輸入的數(shù)據(jù),出錯(cuò)input之二繼續(xù):繼續(xù):inputinput之三之三cmpcmp al, al,00; ;有效數(shù)字判斷有效數(shù)字判斷(圖(圖5.2b5.2b)jbjb input17 input17; ;小于小于00,不是有效數(shù)字,出,不是有效數(shù)字,出錯(cuò)錯(cuò)cmpcmp al, al,ffjaja input17 input17; ;大于大于ff,不是有效數(shù)字,不是有效數(shù)字cmpcmp al, al,aajbjb input11 input11sub al,20hsub al,20h;a;aff轉(zhuǎn)換成大轉(zhuǎn)換成大寫寫AAFFjmpjmp input12 input12inp
40、ut11:input11: cmpcmp al, al,FFjaja input17 input17; ;字符小于字符小于aa、大于、大于FF,出,出錯(cuò)錯(cuò)cmpcmp al, al,AAjaejae input12 input12; ;是是AAFF,有效字符,有效字符cmpcmp al, al,99jaja input17 input17; ;是是0099,有效字符,有效字符input之三繼續(xù):繼續(xù):inputinput之四之四input12:input12: cmpcmp dl,0 dl,0; ;有效字符的處理有效字符的處理jnejne input13 input13movmov dl,al
41、 dl,al;dl=0;dl=0,輸入了一個(gè)數(shù)據(jù)的低位,則,輸入了一個(gè)數(shù)據(jù)的低位,則dlaldlaljmpjmp input02 input02; ;轉(zhuǎn)到字符輸入轉(zhuǎn)到字符輸入input13:input13: cmpcmp dh,0 dh,0jnejne input17 input17;dl0;dl0,dh0dh0輸入輸入3 3位數(shù)據(jù),出錯(cuò)位數(shù)據(jù),出錯(cuò)mov dh,dlmov dh,dl;dl0;dl0,dhdh0 0輸入了一個(gè)數(shù)據(jù)的高位輸入了一個(gè)數(shù)據(jù)的高位movmov dl,al dl,al;dhdl;dhdl,dlaldlaljmpjmp input02 input02; ;轉(zhuǎn)到字符輸入轉(zhuǎn)到
42、字符輸入input之四繼續(xù):繼續(xù):inputinput之五之五input17:input17:movmov dl,7 dl,7; ;輸入錯(cuò)誤處理輸入錯(cuò)誤處理movmov ah,2 ah,2intint 21h 21hmovmov dl,? dl,?movmov ah,2 ah,2intint 21h 21hjmpjmp input01 input01; ;轉(zhuǎn)到輸入一個(gè)數(shù)據(jù)轉(zhuǎn)到輸入一個(gè)數(shù)據(jù)input之五繼續(xù):繼續(xù):inputinput之六之六; ;轉(zhuǎn)換正確的輸入數(shù)據(jù)轉(zhuǎn)換正確的輸入數(shù)據(jù)(圖(圖5.2c5.2c)input20:input20: convertconvertjmpjmp input0
43、1 input01 ; ;轉(zhuǎn)到輸入一個(gè)數(shù)據(jù)轉(zhuǎn)到輸入一個(gè)數(shù)據(jù)input30:input30: convertconvertpop dxpop dxpop axpop axretret; ;返回,出口參數(shù)已設(shè)定返回,出口參數(shù)已設(shè)定inputinputendpendpinputinput之六之六繼續(xù):繼續(xù):convertconvert之一之一;將將DXDX兩位兩位ASCIIASCII碼轉(zhuǎn)換為兩位碼轉(zhuǎn)換為兩位1616進(jìn)制數(shù)(圖進(jìn)制數(shù)(圖5.2c5.2c)convertconvert macromacrolocal input21,input22local input21,input22local in
44、put24,input25local input24,input25cmpcmp dl,0 dl,0;dl=0;dl=0,沒有要轉(zhuǎn)換的數(shù)據(jù),退出,沒有要轉(zhuǎn)換的數(shù)據(jù),退出jeje input25 input25convert之一繼續(xù):繼續(xù):convertconvert之二之二cmpcmp dl,9 dl,9jbejbe input21 input21sub dl,7sub dl,7;字符字符A AF F,則減,則減7 7input21:input21: and dl,0fhand dl,0fh;轉(zhuǎn)換低位轉(zhuǎn)換低位cmpcmp dh,0 dh,0;dh=0;dh=0,沒有高位數(shù)據(jù),沒有高位數(shù)據(jù)jej
45、e input24 input24cmpcmp dh,9 dh,9jbejbe input22 input22sub dh,7sub dh,7input22:input22: shlshl dh,1 dh,1shlshl dh,1 dh,1shlshl dh,1 dh,1shlshl dh,1 dh,1;轉(zhuǎn)換高位轉(zhuǎn)換高位or dl,dhor dl,dh;合并高、低位合并高、低位convert之二繼續(xù):繼續(xù):convertconvert之三之三源文件包含的操作步驟:源文件包含的操作步驟: 分別編輯生成各個(gè)文件分別編輯生成各個(gè)文件 匯編、連接主程序文件匯編、連接主程序文件input24:input
46、24: mov bx,dlmov bx,dl;存入緩沖區(qū)存入緩沖區(qū)inc bxinc bxinc cxinc cx;數(shù)據(jù)加數(shù)據(jù)加1 1input25:input25:endmendmconvert之三把常用子程序?qū)懗瑟?dú)立的源程序文件,單獨(dú)把常用子程序?qū)懗瑟?dú)立的源程序文件,單獨(dú)匯編,形成子程序的目標(biāo)文件匯編,形成子程序的目標(biāo)文件.OBJ主程序也經(jīng)過獨(dú)立匯編之后形成目標(biāo)文件主程序也經(jīng)過獨(dú)立匯編之后形成目標(biāo)文件連接程序?qū)⑺心繕?biāo)文件連接起來,最終產(chǎn)連接程序?qū)⑺心繕?biāo)文件連接起來,最終產(chǎn)生可執(zhí)行文件生可執(zhí)行文件需要遵循的原則:需要遵循的原則: 聲明共用的變量、過程等聲明共用的變量、過程等 實(shí)現(xiàn)正確的段
47、組合實(shí)現(xiàn)正確的段組合 處理好參數(shù)傳遞問題處理好參數(shù)傳遞問題5.3.2 目標(biāo)代碼文件的連接2第 5 章聲明共用的變量、過程各個(gè)模塊間共用的變量、過程等要說明各個(gè)模塊間共用的變量、過程等要說明PUBLIC 標(biāo)識(shí)符標(biāo)識(shí)符 ,標(biāo)識(shí)符標(biāo)識(shí)符.;定義標(biāo)識(shí)符的模塊使用定義標(biāo)識(shí)符的模塊使用EXTERN 標(biāo)識(shí)符標(biāo)識(shí)符:類型類型 ,標(biāo)識(shí)符標(biāo)識(shí)符:類型類型.;調(diào)用標(biāo)識(shí)符的模塊使用調(diào)用標(biāo)識(shí)符的模塊使用標(biāo)識(shí)符是變量名、過程名等標(biāo)識(shí)符是變量名、過程名等類型是類型是byte / word / dword(變量)或(變量)或near / far(過程)(過程)在一個(gè)源程序中,在一個(gè)源程序中,public/extern語句可以
48、有多語句可以有多條條各模塊間的各模塊間的public/extern偽指令要互相配對,偽指令要互相配對,并且指明的類型互相一致并且指明的類型互相一致第 5 章實(shí)現(xiàn)正確的段組合子程序文件必須定義在代碼段中,也可以具有局部子程序文件必須定義在代碼段中,也可以具有局部的數(shù)據(jù)變量的數(shù)據(jù)變量采用簡化段定義格式,只要采用相同的存儲(chǔ)模式,采用簡化段定義格式,只要采用相同的存儲(chǔ)模式,容易實(shí)現(xiàn)正確的近或遠(yuǎn)調(diào)用容易實(shí)現(xiàn)正確的近或遠(yuǎn)調(diào)用完整段定義格式中,為了實(shí)現(xiàn)模塊間的段內(nèi)近調(diào)用完整段定義格式中,為了實(shí)現(xiàn)模塊間的段內(nèi)近調(diào)用(near類型),各自定義的段名、類別必須相同,類型),各自定義的段名、類別必須相同,組合類型都
49、是組合類型都是public。實(shí)際的程序開發(fā)中,各個(gè)模。實(shí)際的程序開發(fā)中,各個(gè)模塊往往由不同的程序員完成,不易實(shí)現(xiàn)段同名或類塊往往由不同的程序員完成,不易實(shí)現(xiàn)段同名或類別相同,所以索性定義成遠(yuǎn)調(diào)用(別相同,所以索性定義成遠(yuǎn)調(diào)用(far類型)類型)定義數(shù)據(jù)段時(shí),同樣也要注意這個(gè)問題。當(dāng)各個(gè)模定義數(shù)據(jù)段時(shí),同樣也要注意這個(gè)問題。當(dāng)各個(gè)模塊的數(shù)據(jù)段不同時(shí),要正確設(shè)置數(shù)據(jù)段塊的數(shù)據(jù)段不同時(shí),要正確設(shè)置數(shù)據(jù)段DS寄存器寄存器的段基地址的段基地址第 5 章處理好參數(shù)傳遞問題少量參數(shù)可用寄存器或堆棧直接傳送數(shù)據(jù)少量參數(shù)可用寄存器或堆棧直接傳送數(shù)據(jù)本身本身大量數(shù)據(jù)可以安排在緩沖區(qū),用寄存器或大量數(shù)據(jù)可以安排在緩
50、沖區(qū),用寄存器或堆棧傳送數(shù)據(jù)的存儲(chǔ)地址堆棧傳送數(shù)據(jù)的存儲(chǔ)地址還可利用變量傳遞參數(shù),但是要采用還可利用變量傳遞參數(shù),但是要采用public/extern聲明為公共(全局)變量聲明為公共(全局)變量這些也是子程序間的參數(shù)傳遞方法這些也是子程序間的參數(shù)傳遞方法另外,第另外,第7章混合編程介紹了更好的堆棧章混合編程介紹了更好的堆棧傳遞參數(shù)方法,可以采用傳遞參數(shù)方法,可以采用例5.12b主程序主程序lt512b.asm并入宏定義并入宏定義子程序文件子程序文件sub512b.asm,要,要加上段定義語句、聲明語句等,加上段定義語句、聲明語句等,但不需要起始點(diǎn)和結(jié)束點(diǎn)但不需要起始點(diǎn)和結(jié)束點(diǎn)模塊連接的操作步驟
51、:模塊連接的操作步驟: 分別編輯生成各個(gè)文件分別編輯生成各個(gè)文件 分別匯編各個(gè)文件分別匯編各個(gè)文件 連接各個(gè)目標(biāo)文件,形成連接各個(gè)目標(biāo)文件,形成可執(zhí)行文件可執(zhí)行文件.; ;宏定義宏定義.code.codepublic countpublic count; ;定義定義countcount共用共用extern ALdisp:near,sorting:near,input:farextern ALdisp:near,sorting:near,input:far; ;聲明其他模塊中的子程序聲明其他模塊中的子程序.startup.startup.exit 0.exit 0; ;去掉(去掉(lt512a.
52、asmlt512a.asm中的)包含語句中的)包含語句endendLt512b.asm.model small.model small ; ;定義同樣的存儲(chǔ)模式定義同樣的存儲(chǔ)模式extern count:wordextern count:word; ;在其他模塊定義了字變量在其他模塊定義了字變量countcount.code.code; ;子程序在代碼段中子程序在代碼段中public aldisp,sorting,inputpublic aldisp,sorting,input;3;3個(gè)子程序是共用的個(gè)子程序是共用的AldispAldispprocproc; ;仍然作為近調(diào)用仍然作為近調(diào)用so
53、rtingsorting procproc; ;仍然作為近調(diào)用仍然作為近調(diào)用inputinputproc farproc far; ;修改為遠(yuǎn)調(diào)用修改為遠(yuǎn)調(diào)用.mov count,cxmov count,cx ; ;提供出口參數(shù)提供出口參數(shù).inputinputendpendpendend; ;結(jié)束匯編結(jié)束匯編sub512b.asm把常用子程序?qū)懗瑟?dú)立的源文件,單獨(dú)把常用子程序?qū)懗瑟?dú)立的源文件,單獨(dú)匯編形成匯編形成OBJ文件后,存入文件后,存入子程序庫子程序庫主程序也單獨(dú)匯編形成主程序也單獨(dú)匯編形成OBJ文件文件主程序連接時(shí),調(diào)入子程序庫中的子程主程序連接時(shí),調(diào)入子程序庫中的子程序模塊,產(chǎn)生最
54、終的可執(zhí)行文件序模塊,產(chǎn)生最終的可執(zhí)行文件例例5.12c5.12c 主程序文件主程序文件 lt512c.asm 子程序文件子程序文件 sub512c1.asm 子程序文件子程序文件 sub512c2.asm 子程序文件子程序文件 sub512c3.asm5.3.3 子程序庫的調(diào)入3子程序庫子程序庫文件(子程序庫文件(.LIB)是子程序模塊的集合,其中)是子程序模塊的集合,其中存放著各子程序的名稱、目標(biāo)代碼及有關(guān)定位信存放著各子程序的名稱、目標(biāo)代碼及有關(guān)定位信息息存入庫的子程序的編寫與目標(biāo)文件連接方法中的存入庫的子程序的編寫與目標(biāo)文件連接方法中的要求一樣,只是為方便調(diào)用,更加嚴(yán)格要求一樣,只是為
55、方便調(diào)用,更加嚴(yán)格子程序文件編寫完成后,匯編形成目標(biāo)文件;然子程序文件編寫完成后,匯編形成目標(biāo)文件;然后利用庫管理工具程序后利用庫管理工具程序LIB.EXE,把子程序目標(biāo)模,把子程序目標(biāo)模塊逐一加入到庫中塊逐一加入到庫中LIB 庫文件名庫文件名 + 子程序目標(biāo)文件名子程序目標(biāo)文件名庫管理程序庫管理程序LIB幫助創(chuàng)建、組織和維護(hù)子程序模塊幫助創(chuàng)建、組織和維護(hù)子程序模塊庫,例如增加、刪除、替換、合并庫文件等庫,例如增加、刪除、替換、合并庫文件等第 5 章.; ;宏定義宏定義.code.codeextern ALdisp:near,sorting:near,input:nearextern ALdi
56、sp:near,sorting:near,input:near; ;聲明其他模塊中的子程序聲明其他模塊中的子程序.startup.startup.exit 0.exit 0endendLt512c.asm.model small.model small.code.codepublic aldisppublic aldispAldispAldispprocproc.AldispAldispendpendpendendsub512c1.asm.model small.model small.code.codepublic sortingpublic sortingsortingsortingpro
57、cproc.sortingsortingendpendpendendsub512c2.asm.model small.model small.code.codepublic inputpublic inputinputinputprocproc.inputinputendpendpendendsub512c3.asm庫文件調(diào)入的操作步驟:庫文件調(diào)入的操作步驟: 分別編輯生成各個(gè)文件分別編輯生成各個(gè)文件 分別匯編各個(gè)文件分別匯編各個(gè)文件 用庫管理文件,將子程序模塊添加用庫管理文件,將子程序模塊添加到庫文件(到庫文件(.LIB.LIB)中)中 連接主程序,提供庫文件,連接主程序,提供庫文件,形成可
58、執(zhí)行文件形成可執(zhí)行文件第 5 章補(bǔ)充例題將子程序應(yīng)用的例題將子程序應(yīng)用的例題4.134.15的子程序編的子程序編寫成模塊,供主程序調(diào)用寫成模塊,供主程序調(diào)用實(shí)現(xiàn)功能:從鍵盤輸入有符號十進(jìn)制數(shù),求實(shí)現(xiàn)功能:從鍵盤輸入有符號十進(jìn)制數(shù),求它們的平均值,然后輸出它們的平均值,然后輸出源程序文件進(jìn)行簡單修改源程序文件進(jìn)行簡單修改n主程序文件主程序文件n子程序文件子程序文件利用目標(biāo)代碼文件的連接形成可執(zhí)行文件利用目標(biāo)代碼文件的連接形成可執(zhí)行文件.model small.model smallextern read:near,write:near,mean:nearextern read:near,writ
59、e:near,mean:near; ;外部子程序外部子程序public wtemppublic wtemp; ;變量共用變量共用.stack.stack.data.data; ;數(shù)據(jù)定義數(shù)據(jù)定義.code.code; ;輸入、計(jì)算和輸出輸入、計(jì)算和輸出endend主程序文件.model small.model smallpublic read,write,meanpublic read,write,mean; ;子程序共用子程序共用extern wtemp:wordextern wtemp:word; ;外部變量外部變量.code.code; ;代碼段代碼段readreadprocproc;
60、;輸入子程序輸入子程序readreadwritewriteprocproc; ;輸出子程序輸出子程序writewritemeanmeanprocproc; ;計(jì)算平均值子程序計(jì)算平均值子程序meanmeanendend子程序文件第 5 章5.4 輸入輸出程序設(shè)計(jì)輸入指令輸入指令I(lǐng)N從外設(shè)讀取數(shù)據(jù)從外設(shè)讀取數(shù)據(jù)輸出輸出OUT指令向外設(shè)提供數(shù)據(jù)指令向外設(shè)提供數(shù)據(jù)處理器通過處理器通過I/O接口控制外設(shè)接口控制外設(shè)參考參考I/O指令指令第第2.1.5節(jié)節(jié)建議結(jié)合硬件相關(guān)課程學(xué)習(xí)建議結(jié)合硬件相關(guān)課程學(xué)習(xí)第 5 章5.4.1 程序直接控制輸入輸出程序執(zhí)行程序執(zhí)行IN或或OUT指令實(shí)現(xiàn)數(shù)據(jù)傳送指令實(shí)現(xiàn)數(shù)據(jù)傳送.model tiny.model tiny; ;形成形成comcom格式的程序格式的程序.code.code.startup.star
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年制衣面料供應(yīng)居間合同
- 2025版小企業(yè)合同管理規(guī)范與合同管理信息化解決方案3篇
- 2025年超額展覽會(huì)保險(xiǎn)條款
- 二零二五版新型環(huán)保建材采購合同樣本2篇
- 2025版企事業(yè)單位食堂員工招聘與服務(wù)協(xié)議3篇
- 2024-2025年中國寬帶行業(yè)市場評估分析及投資發(fā)展盈利預(yù)測報(bào)告
- 2025版小額貸款合同簽訂中的合同簽訂中的合同簽訂前的準(zhǔn)備與協(xié)商3篇
- 二零二五年度門面房裝修工程設(shè)計(jì)與施工質(zhì)量監(jiān)理合同
- 2025版建筑行業(yè)設(shè)備托管正規(guī)范本3篇
- 二零二五年度游艇俱樂部船舶租賃售后服務(wù)合同
- 2024年高考語文備考之??甲骷易髌罚ㄏ拢褐袊F(xiàn)當(dāng)代、外國
- 《裝配式蒸壓加氣混凝土外墻板保溫系統(tǒng)構(gòu)造》中
- T-CSTM 01124-2024 油氣管道工程用工廠預(yù)制袖管三通
- 2019版新人教版高中英語必修+選擇性必修共7冊詞匯表匯總(帶音標(biāo))
- 新譯林版高中英語必修二全冊短語匯總
- 基于自適應(yīng)神經(jīng)網(wǎng)絡(luò)模糊推理系統(tǒng)的游客規(guī)模預(yù)測研究
- 河道保潔服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 品管圈(QCC)案例-縮短接臺(tái)手術(shù)送手術(shù)時(shí)間
- 精神科病程記錄
- 閱讀理解特訓(xùn)卷-英語四年級上冊譯林版三起含答案
- 清華大學(xué)考博英語歷年真題詳解
評論
0/150
提交評論