版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章宏結(jié)構(gòu)程序設(shè)計(jì)macrolocal宏宏展開(kāi)IF教學(xué)重點(diǎn)宏定義宏展開(kāi)宏參數(shù)宏結(jié)構(gòu)宏匯編 重復(fù)匯編 條件匯編
——統(tǒng)稱宏結(jié)構(gòu)宏(Macro)是匯編語(yǔ)言的一個(gè)特點(diǎn),它是與子程序類似又獨(dú)具特色的另一種簡(jiǎn)化源程序的方法10.1宏匯編
宏——具有宏名的一段匯編語(yǔ)句序列——宏定義時(shí)書(shū)寫(xiě)宏指令——這段匯編語(yǔ)句序列的縮寫(xiě)——宏調(diào)用時(shí)書(shū)寫(xiě)宏展開(kāi)——宏指令處用這段宏代替的過(guò)程——宏匯編時(shí)實(shí)現(xiàn)宏的參數(shù)功能強(qiáng)大,頗具特色配合宏,還有宏操作符和有關(guān)偽指令宏定義宏名
MACRO[形參表]
宏定義體
ENDM模式定義宏保護(hù)寄存器宏恢復(fù)寄存器宏交換變量宏宏定義體可以是任何合法的匯編語(yǔ)句,既可以是硬指令序列,又可以是偽指令序列MODE32macro;;定義一個(gè)名為MODE32的宏,無(wú)參數(shù).386.modelflat,stdcall ;;宏定義體endm ;;宏定義結(jié)束MODE16macro;;定義一個(gè)名為MODE32的宏,無(wú)參數(shù).modelsmall,stdcall ;;宏定義體.386endm ;;宏定義結(jié)束宏注釋符模式定義宏SaveRegs定義宏SaveRegs,保存通用寄存器和標(biāo)志寄存器的內(nèi)容:
SaveRegs
macro pushebx
pushedi
pushesi
pushebp pushfd
endmRestorRegs宏RestorRegs來(lái)恢復(fù)SaveRegs保存的寄存器:
RestorRegsmacro
popfd
popebp
popesi
popedi
popebx endm帶參數(shù)的宏Xchgxy宏也可以有參數(shù)。定義一個(gè)宏用來(lái)交換兩個(gè)變量的內(nèi)容:
Xchgxymacrox,y pushx pushy popx popy
endm宏調(diào)用宏名
[實(shí)參表]宏調(diào)用的實(shí)質(zhì)是在匯編過(guò)程中進(jìn)行宏展開(kāi)宏展開(kāi)的具體過(guò)程是:當(dāng)匯編程序掃描源程序遇到已有定義的宏調(diào)用時(shí),即用相應(yīng)的宏定義體取代源程序的宏指令,同時(shí)用位置匹配的實(shí)參對(duì)形參進(jìn)行取代例10-1例10-1例10-1:利用宏結(jié)構(gòu)設(shè)計(jì)一個(gè)32位應(yīng)用程序?qū)崿F(xiàn)保存和恢復(fù)寄存器。例10-1(4-1)
MODE32macro ;;定義一個(gè)名為MODE32的宏,無(wú)參數(shù).386.modelflat,stdcall ;;宏定義體endm ;;宏定義結(jié)束例10-1(4-2);;定義保存寄存器的宏RestorRegsmacro POPFD POPEBP POPESI POPEDI POPEBX
endm例10-1(4-3);;定義恢復(fù)寄存器的宏SaveRegsmacroPUSHEBXPUSHEDIPUSHESIPUSHEBPPUSHFDendm
例10-1(4-4)MODE32.codestart:SaveRegsRestorRegsretendstart宏展開(kāi)宏展開(kāi)——在匯編時(shí),用宏定義體的代碼序列替代宏指令的過(guò)程。通過(guò)列表文件可以查看宏展開(kāi)的結(jié)果。例10-1的列表文件SaveRegs
1 pushebx
1 pushedi
1 pushesi
1 pushebp
1 pushfdRestorRegs
1 popfd
1 popebp
1 popesi
1 popedi
1 popebx宏嵌套宏定義允許嵌套,即宏定義體內(nèi)可以有宏定義,對(duì)這樣的宏進(jìn)行調(diào)用時(shí)需要多次分層展開(kāi)。宏定義中可以有宏調(diào)用,只要遵循先定義后調(diào)用的原則。先定義后調(diào)用
pushParams macrox,y ;;宏定義,參數(shù)進(jìn)棧
pushxpushy
endmCallProcmacrofunction,x,y;;含有宏調(diào)用的宏定義
pushParamsx,y;;宏調(diào)用
callfunction
endmCallProcsum,3,5 ;宏調(diào)用
2 pushx;宏展開(kāi)(第二層)2pushy1 callsum ;宏展開(kāi)(第一層)宏的參數(shù)宏的參數(shù)使用非常靈活宏定義時(shí),可以無(wú)參數(shù),例如MODE32可以具有多個(gè)參數(shù);例如pushParams參數(shù)可以是常數(shù)、變量、存儲(chǔ)單元、指令(操作碼)或它們的一部分,也可以是表達(dá)式;例10-2例10-3例10-4例10-2(2-1)
shlextmacroshloprand,shlnumpushecxmov
cl,shlnum;;shlnum表示移位次數(shù)shl
shloprand,cl ;;shloprand表示被移位的操作數(shù)popecxendm例10-2(2-2)當(dāng)我們要將AX左移6位時(shí),可以采用如下宏指令:
shlextax,6匯編后,宏展開(kāi)為:
1 pushecx
1 movcl,061 shlax,cl
1 popecx例10-3(2-1)shift macrosoprand,snum,sopcodepushecxmov
cl,snums&sopcode&soprand,clpopecxendm例10-3(2-2)當(dāng)我們要將AX左移6位時(shí),可以采用如下宏指令:
shiftax,6,hl
匯編后,宏展開(kāi)為:
1 pushecx
1 movcl,061 shlax,cl
1 popecxshrot;;把8條移位和循環(huán)移位指令統(tǒng)一起來(lái)shrot macrosroprand,srnum,sropcode
pushecx mov
cl,srnum sropcode
sroprand,cl
popecxendm例10-4dstring macrostringbyte’&string&’,0dh,0ah,’$’endm定義字符串‘Thisisaexample.’:dstring <Thisisaexample.>宏展開(kāi):
1byte‘Thisisanexample.’,0dh,0ah,$’宏操作符(1)&——替換操作符,用于將參數(shù)與其他字符分開(kāi)。如果參數(shù)緊接在其他字符之前或之后,或者參數(shù)出現(xiàn)在帶引號(hào)的字符串中,就必須使用該偽操作符<>——字符串傳遞操作符,用于括起字符串。在宏調(diào)用中,如果傳遞的字符串實(shí)參數(shù)含有逗號(hào)、空格等間隔符號(hào),則必須用這對(duì)操作符,以保證字符串的完整宏操作符%——表達(dá)式操作符,用在宏調(diào)用中,表示將后跟的一個(gè)表達(dá)式的值作為實(shí)參,而不是將表達(dá)式本身作為參數(shù)dstring %(1024-1) ;宏調(diào)用
1byte’1023’,0dh,0ah,’$’ ;宏展開(kāi)如果不加%調(diào)用:dstring 1024-1 ;宏調(diào)用1byte’1024-1’,0dh,0ah,’$’ ;宏展開(kāi)宏操作符!——轉(zhuǎn)義操作符,用于指示其后的一個(gè)字符作為一般字符,不含特殊意義dstring <0!<Number!<10> ;宏調(diào)用byte’0<Number<10’,0dh,0ah,’$’ ;宏展開(kāi)dstring10%7=3;宏調(diào)用byte“107=3”,0dh,0ah,’$’dstring10!%7=3;宏調(diào)用byte“10%7=3”,0dh,0ah,’$’;宏展開(kāi)宏操作符;;——宏注釋符,用于表示在宏定義中的注釋。采用這個(gè)符號(hào)的注釋,在宏展開(kāi)時(shí)不出現(xiàn)實(shí)參與形參匯編程序不對(duì)實(shí)參和形參進(jìn)行類型檢查,完全是字符串的替代,至于宏展開(kāi)后是否有效則由匯編程序翻譯時(shí)進(jìn)行語(yǔ)法檢查。因此在編寫(xiě)定義宏時(shí),應(yīng)保證宏調(diào)用時(shí),用實(shí)參替換形參后,所展開(kāi)的匯編語(yǔ)句有效。例10-5設(shè)計(jì)一個(gè)宏實(shí)現(xiàn)兩個(gè)數(shù)的減法,保存差,但不改變被減數(shù)和減數(shù)。例10-5:宏定義SUBX1macrominuend,subtrahend,difference pushminuend subminuend,subtrahend
movdifference,minuend popminuend
endm;計(jì)算eax=ebx-8,SUBX1ebx,8,eax;宏展開(kāi):
pushebx
subebx,8
mov
eax,ebx
popebx例10-5:宏調(diào)用和展開(kāi);計(jì)算var1=var2-var3,SUBX1var2,var3,var1展開(kāi)的指令代碼序列是:
pushvar2 subvar2,var3;
movvar1,var2 popvar2例10-5:宏調(diào)用和展開(kāi)非法指令,匯編提示錯(cuò)誤。SUBX2macrominuend,subtrahend,difference pusheax mov
eax,minuend subeax,subtrahend
movdifference,eax
popeax endmSUBX2;計(jì)算var1=var2-var3,SUBX2var2,var3,var1展開(kāi)的指令代碼序列是:
pushvar2
mov
eax,var2 subeax,var3;
movvar1,eax
popvar2SUBX2調(diào)用與宏有關(guān)的偽指令局部標(biāo)號(hào)偽指令LOCAL標(biāo)號(hào)列表宏定義體采用了標(biāo)號(hào),應(yīng)使用LOCAL加以說(shuō)明它必須是宏定義MACRO語(yǔ)句之后的第一條語(yǔ)句宏定義刪除偽指令PURGE宏名表不需要某個(gè)宏定義時(shí),可以把它刪除宏定義退出偽指令EXITM偽指令EXITM表示結(jié)束當(dāng)前宏調(diào)用的展開(kāi)例10-6minmacroa,b,x localexitmin
pusheax mov
eax,a
cmp
eax,b
jb
exitmin mov
eax,b
exitmin: movx,eax
popeax endm ;;這個(gè)偽指令要獨(dú)占一行例10-6:有標(biāo)號(hào)的宏定義(4-1)minm1,m2,m3minm2,m1,m3例10-6:有標(biāo)號(hào)的宏定義(4-2)minm1,m2,m31 pusheax
1 mov
eax,m11cmpeax,m21 jb??00001mov
eax,m21??0000:1movm3,eax1popeax例10-6:有標(biāo)號(hào)的宏定義(4-3)minm2,m1,m31pusheax
1 mov
eax,m21cmpeax,m11 jb??00011mov
eax,m11??0001:1movm3,eax1popeax例10-6:有標(biāo)號(hào)的宏定義(4-4)比較僅是源程序級(jí)的簡(jiǎn)化:宏調(diào)用在匯編時(shí)進(jìn)行程序語(yǔ)句的展開(kāi),不需要返回;不減小目標(biāo)程序,執(zhí)行速度沒(méi)有改變通過(guò)形參、實(shí)參結(jié)合實(shí)現(xiàn)參數(shù)傳遞,簡(jiǎn)捷直觀、靈活多變這是目標(biāo)程序級(jí)的簡(jiǎn)化:子程序調(diào)用在執(zhí)行時(shí)由CALL指令轉(zhuǎn)向、RET指令返回;形成的目標(biāo)代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲(chǔ)單元或堆棧等傳遞參數(shù)宏子程序宏與子程序具有各自的特點(diǎn),程序員應(yīng)該根據(jù)具體問(wèn)題選擇使用那種方法通常,當(dāng)程序段較短或要求較快執(zhí)行時(shí),應(yīng)選用宏;當(dāng)程序段較長(zhǎng)或?yàn)闇p小目標(biāo)代碼時(shí),要選用子程序比較
結(jié)論宏子程序10.2重復(fù)匯編重復(fù)匯編指在匯編過(guò)程中,重復(fù)展開(kāi)一段(基本)相同的語(yǔ)句重復(fù)匯編沒(méi)有名字,不能被調(diào)用重復(fù)匯編常用在宏定義體中,也可以在一般匯編語(yǔ)句中使用重復(fù)匯編偽指令有三個(gè):REPEAT——按參數(shù)值重復(fù)FOR——按參數(shù)個(gè)數(shù)重復(fù)FORC——按參數(shù)的字符個(gè)數(shù)重復(fù)最后,用ENDM結(jié)束按參數(shù)值重復(fù)REPEAT
重復(fù)次數(shù)重復(fù)體ENDMchar=’A’Aztable
equthisbyte;Aztable用于為字符串指明首地址
repeat26 bytechar char=char+1
endm
Aztable
equthisbyte
1bytechar;等效于byte'A'1char=char+11bytechar;等效于byte'B'1char=char+1...1bytechar;等效于byte'Z'1char=char+1按參數(shù)個(gè)數(shù)重復(fù)FOR
形參,〈實(shí)參表〉
重復(fù)體ENDMforregad,<eax,ebx,ecx,edx>pushregadendm1 pusheax
1 pushebx
1 pushecx
1 pushedx按參數(shù)字符個(gè)數(shù)重復(fù)FORC形參,字符串重復(fù)體ENDMforcregad,dcba
pope®ad&xendm1 popedx
1 popecx
1 popebx
1 popeax10.3條件匯編條件匯編偽指令在匯編過(guò)程中,根據(jù)條件決定匯編的語(yǔ)句IFxx
表達(dá)式
;滿足,匯編分支語(yǔ)句體1
分支語(yǔ)句體1[ELSE
;不滿足,匯編分支語(yǔ)句體2
分支語(yǔ)句體2]ENDIF
;條件匯編結(jié)束表10-1條件匯編偽指令格式功能說(shuō)明IF表達(dá)式匯編程序求出表達(dá)式的值,此值不為0則條件滿足IFE表達(dá)式匯編程序求出表達(dá)式的值,此值為0則條件滿足IFDEF
符號(hào)符號(hào)已定義(內(nèi)部定義或聲明外部定義),則條件滿足IFNDEF符號(hào)符號(hào)未定義,則條件滿足IFB<形參>用在宏定義體。如果宏調(diào)用沒(méi)有用實(shí)參替代該形參,則條件滿足IFNB <形參>用在宏定義體。如果宏調(diào)用用實(shí)參替代該形參,則條件滿足IFIDN<字符串1>,<字符串2>字符串1與字符串2相同則條件滿足;區(qū)別大小寫(xiě)IFIDNI<字符串1>,<字符串2>字符串1與字符串2相同則條件滿足;不區(qū)別大小寫(xiě)IFDIF <字符串1>,<字符串2>字符串1與字符串2不相同則條件滿足;區(qū)別大小寫(xiě)IFDIFI<字符串1>,<字符串2>字符串1與字符串2不相同則條件滿足;不區(qū)別大小寫(xiě)hexchars
equthisbyteindex=0repeat16ifindexlt10byteindex+’0’elsebyteindex-10+’A’endifindex=index+1endm例10-10:定義一個(gè)16進(jìn)制的字符表
相當(dāng)于:hexcharsbyte‘0123456789ABCDEF’pdata macronumifnumlt100;;如果num<100,則匯編如下語(yǔ)句bytenumdup(?)else ;;否則,匯編如下語(yǔ)句byte100dup(?)endifendm例10-11:定義一個(gè)元素個(gè)數(shù)不超過(guò)100的數(shù)組(2-1)
pdata12 ;宏調(diào)用①byte12dup(?) ;宏匯編結(jié)果①pdata102 ;宏調(diào)用②byte100dup(?) ;宏匯編結(jié)果②例10-11:定義一個(gè)元素個(gè)數(shù)不超過(guò)100的數(shù)組(2-2)
例10-12例10-12:編寫(xiě)宏MAXNUM,計(jì)算3個(gè)以內(nèi)的數(shù)(形參)中的最大值,并將結(jié)果送入AX寄存器,要求根據(jù)宏調(diào)用時(shí)的實(shí)參個(gè)數(shù)展開(kāi)相應(yīng)的代碼。分析:實(shí)際參加比較的數(shù)應(yīng)該有一個(gè),所以第一個(gè)參數(shù)設(shè)定為不可缺?。?req)。如果只有兩個(gè)參數(shù),則只需比較一次,后一個(gè)比較的代碼不用展開(kāi)。宏定義體中判斷后兩個(gè)實(shí)參是否為空而匯編相應(yīng)的比較代碼。maxnummacrowx:req,wy,wzlocalmaxnum1,maxnum2movax,wxifnb<wy> ;;當(dāng)有wy實(shí)參時(shí),匯編如下語(yǔ)句cmpax,wyjgemaxnum1movax,wyendif例10-12
maxnum1:ifnb<wz> ;;當(dāng)有wz實(shí)參時(shí),匯編如下語(yǔ)句cmpax,wzjgemaxnum2movax,wzendifmaxnum2:endm例10-12
maxnum
bx ;宏調(diào)用①
例10-12
movax,bx ;宏匯編結(jié)果①maxnum3,4 ;宏調(diào)用②
例10-12
movax,3 ;宏匯編結(jié)果②cmpax,4jge??0002movax,4??0002:maxnumn1,n2,n3 ;宏調(diào)用③
例10-12
maxnumn1,n2,n3 ;宏調(diào)用③
movax,n1 ;宏匯編結(jié)果③
cmpax,n2
jge??0004
movax,n2??0004:cmpax,n3
jge??0005
movax,n3??0005:IFDEF
ifdefDEBUGWriteUDecBytealendifSUBX2
SUBX2macrominuend,subtrahend,differencepusheaxmov
eax,minuendsubeax,subtrahendmovdifference,eaxpopeaxendmSUBX210,5,EAX;計(jì)算EAX=10-5
SUBX2pusheaxmov
eax,10subeax,5mov
eax,eaxpopeax減法的結(jié)果賦值給EAX后,又將堆棧中保存的原來(lái)EAX的內(nèi)容傳送給了EAX,沒(méi)有實(shí)現(xiàn)預(yù)期功能。
SUBX3SUBX3macrominuend,subtrahend,differenceifidni<difference&subtrahend>,<EAXEAX>;減數(shù)和差為EAX subeax,minuend
neg
eax exitm endif
SUBX3
ifidni<difference>,<EAX> ;差為EAX MOVeax,minuend SUBeax,SUBTRAHEND
exitm endif
SUBX3
ifidni<subtrahend>,<EAX>;減數(shù)為EAX pusheax
subeax,minuend
neg
eax movdifference,eax
popeax
SUBX3
else pusheax mov
eax,minuend subeax,subtrahend
movdifference,eax
popeaxendifendmSUBX310,5,EAX
SUBX3moveax,10subeax,5例10-13:用宏結(jié)構(gòu)實(shí)現(xiàn)信息顯示的實(shí)模式下的程序(6-1)
mode32macro;;定義一個(gè)名為MODE32的宏,無(wú)參數(shù).386.modelflat,stdcall ;;宏定義體includelib\masm32\kernel32.lib.stack4096STD_OUTPUT_HANDLEEQU-11;輸出設(shè)備GetStdHandleproto,nStdHandle:dwordWriteConsoleA
proto,handle:dword,lpBuffer:ptrbyte,
nNumberOfBytesToWrite:dword,
lpNumberOfBytesWritten:ptrdword,
lpReserved:dword ;保留
endm ;;宏定義結(jié)束例10-13:用宏結(jié)構(gòu)實(shí)現(xiàn)信息顯示的實(shí)模式下的程序(6-2)dstringmacrostring ;;定義字符串
byte’&string&’,0dh,0ah,’$’
endm例10-13:用宏結(jié)構(gòu)實(shí)現(xiàn)信息顯示的實(shí)模式下的程序(6-3)dispmsg macromessage,messagesizelocalConsoleHandle,bytesWrittenifb<message>.err<nostring!>.exitmendififb<messagesize>.err<nosize!>.exitmendif例10-13:用宏結(jié)構(gòu)實(shí)現(xiàn)信息顯示的實(shí)模式下的程序(6-4).dataconsoleHandle
dword?bytesWrittendword?.codeinvokeGetStdHandle,STD_OUTPUT_HANDLEmov
consoleHandle,eax
;顯示字符串invokeWriteConsoleA,consoleHandle, offsetmessage,messageSize, offsetbytesWritten,
0endm例10-13:用宏結(jié)構(gòu)實(shí)現(xiàn)信息顯示的實(shí)模式下的程序(6-5)mode32.datamsg1 equthisbytedstring <Hello,Everybody!!>msg1size=($-msg1)msg2 equthisbytedstring <Yousee,Imadeit.>msg2size=($-msg2)例10-13:用宏結(jié)構(gòu)實(shí)現(xiàn)信息顯示的實(shí)模式下的程序(6-6).codestart: dispmsgmsg1,msg1zise;顯示msg1字符串dispmsgmsg2,msg2size;顯示msg2字符串retendstart宏
結(jié)
構(gòu)
的
作
用宏匯編、重復(fù)匯編和條件匯編 為源程序的編寫(xiě)提供了很多方便, 靈
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于民族特色酒館的問(wèn)卷調(diào)查
- 電商行業(yè)的消費(fèi)者滿意度影響因素實(shí)踐研究
- 股權(quán)結(jié)構(gòu)對(duì)公司財(cái)務(wù)透明度的提升作用研究分析
- 江蘇省南京市鼓樓實(shí)驗(yàn)中學(xué)2024屆中考數(shù)學(xué)考試模擬沖刺卷含解析
- 綠色建筑科技行業(yè)經(jīng)營(yíng)模式分析
- 廢舊橡膠回收利用行業(yè)的消費(fèi)市場(chǎng)分析
- 2023年天津市武清區(qū)招聘制教師招聘考試試題及答案
- 2023年神東煤炭集團(tuán)招聘筆試真題
- 2023年遼寧丹東振安區(qū)社區(qū)專職工作者招錄筆試真題
- 2023年第一師醫(yī)院醫(yī)共體招聘工作人員筆試真題
- (完整版)手術(shù)室應(yīng)對(duì)傳染病或特殊感染手術(shù)的應(yīng)急預(yù)案
- 小學(xué)四年級(jí)開(kāi)學(xué)家長(zhǎng)會(huì)ppt
- 一字一句普通話千言萬(wàn)語(yǔ)繪中華 課件-2023-2024學(xué)年高一上學(xué)期推廣普通話主題班會(huì)
- 2023新時(shí)代解決臺(tái)灣問(wèn)題的總體方略PPT
- 旋轉(zhuǎn)機(jī)械振動(dòng)分析與工程應(yīng)用課件
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)-終結(jié)性考試試題國(guó)開(kāi)要求
- 電線電纜項(xiàng)目投資計(jì)劃書(shū)
- 《軍事理論與軍事技能》課程標(biāo)準(zhǔn)
- 大數(shù)據(jù)與會(huì)計(jì)專業(yè)人才需求與專業(yè)調(diào)研報(bào)告
- 《文案策劃與寫(xiě)作》課程教學(xué)大綱
- 江蘇響水化工廠爆炸事故經(jīng)驗(yàn)分享
評(píng)論
0/150
提交評(píng)論