




已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第八章 ARM C語言的使用,DMATEK CO.,LTD 深圳市長高科技有限公司,本章節(jié)將介紹ARM C語言程式設(shè)計(jì)概念,透過對本文的閱讀,希望讀者能瞭解ARM微處理器支援的C語言的使用方法,我們會(huì)搭配反組譯的功能,讓讀者更瞭解ARM是如何來支援高階語言的運(yùn)作。 本章的主要內(nèi)容有: 抽象化概念 運(yùn)算子 區(qū)域變數(shù)/全域變數(shù) 指標(biāo)運(yùn)算 迴圈/條件判斷 傳址呼叫和傳值呼叫,8-1 抽象化概念: 當(dāng)讀者熟讀前面幾章後,應(yīng)該對ARM有深刻的印象,在指令集您會(huì)感覺到ARM的強(qiáng)大功能,單一指令可以同時(shí)完成許多動(dòng)作,然而使用組合語言來撰寫程式,您一定倍感辛苦,而特別是靈活運(yùn)用條件執(zhí)行Conditional Execution,把每一道指令添增了16種變化,相信您必須具備孫悟空72變化能力才能順利駕馭。本章將說明如何使用高階語言來撰寫ARM應(yīng)用程式。在這之前先讓我們來看看組合語言及C語言抽象化的概念。 組合語言層次的抽象化 程式設(shè)計(jì)師直接以指令來撰寫組合語言的程式,您必須熟悉指令格式、定址方式、暫存器及記憶體空間等觀念。通常組合言的指令和機(jī)器指令是採1對1的關(guān)係,在指令格式中要特別注意條件執(zhí)行,若能妥善運(yùn)用不但能增強(qiáng)管線的效能而且程式也變得更加精簡,程式長度有可能比高階語言還要短。ARM指令集可分成ARM及THUMB兩種,前者為32位元而後者則為16位元。通常對於要求效能可以使用32位元,但對於空間及節(jié)能等需求時(shí)則可以考慮將部份程式用THUMB指令撰寫。,高階語言層次的抽象化 高階語言允許程式設(shè)計(jì)師以跳脫機(jī)械層級的思考來撰寫程式。高階語言和機(jī)器語言間已不是1對1的關(guān)係,對高階語言的程式設(shè)計(jì)師而言,不見得要熟悉ARM指令或暫存器等配置。所以有很多高階語言程式設(shè)計(jì)師並不見得對ARM機(jī)器有很深的瞭解。然而建議讀者要清楚瞭解ARM的硬體結(jié)構(gòu),在撰寫C語言程式時(shí),能多考慮到ARM機(jī)器的特質(zhì),如此才能事半功倍。例如:過長的迴圈將會(huì)使快取記憶體(Cache)無法發(fā)揮它的長才。,8-2 運(yùn)算子: C語言提供強(qiáng)大的運(yùn)算子來處理運(yùn)算工作,運(yùn)算子可分成一元運(yùn)算子Unary Operators、二元運(yùn)算子Binary Operators、及三元運(yùn)算子Ternary Operators,依其功能可將運(yùn)算子可分成下列: 1. 算術(shù)運(yùn)算子Arithmetic Operators 2. 關(guān)係運(yùn)算子Relational Operators 3. 邏輯運(yùn)算子Logical Operators 4. 指定運(yùn)算子Assignment Operators 5. 增減運(yùn)算子Increments and Decrement Operators 6. 條件運(yùn)算子Conditional Operators 7. 位元運(yùn)算子Bitwise Operators 8. 特殊運(yùn)算子Special Operators,8-2.1 算術(shù)運(yùn)算子 算術(shù)運(yùn)算子可分成:加法、減法、乘法、除法、及取餘數(shù),分別用+、-、*、/、及%來表示。詳如下表:,以下為運(yùn)算子的範(fàn)例: int main() int a,b,c; a=1; b=2; c=a+b; return 0; 其反組譯程式如下: 1 int main() 2 3 int a,b,c; 4 a=1; main 0xe3a01001 * mov r1,#1,5 b=2; 000080ac 0xe3a02002 mov r2,#2 6 c=a+b; 000080b0 0xe0813002 add r3,r1,r2 7 return 0; 000080b4 0xe3a00000 mov r0,#0 8 000080b8 0xe1a0f00e mov pc,r14,接下來我們來觀察,ARM對於除法的支援情形,以下是除法範(fàn)例的反組譯程式列表: 3 int a,b,c; 4 a=6; 000080ac 0xe3a04006 mov r4,#6 5 b=2; 000080b0 0xe3a05002 mov r5,#2 6 c=a/b; 000080b4 0xe1a01004 mov r1,r4 000080b8 0xe1a00005 mov r0,r5 000080bc 0xeb000004 bl _rt_sdiv 000080c0 0xe1a06000 mov r6,r0,您應(yīng)該可以發(fā)現(xiàn)ARM並未提供除法指令而由呼叫_rt_sdiv副程式取代,我們再來看看取餘數(shù)的反組譯程式列表: 3 int a,b,c; 4 a=6; 000080ac 0xe3a04006 mov r4,#6 5 b=2; 000080b0 0xe3a05002 mov r5,#2 6 c=a%b; 000080b4 0xe1a01004 mov r1,r4 000080b8 0xe1a00005 mov r0,r5 000080bc 0xeb000004 bl _rt_sdiv 000080c0 0xe1a06001 mov r6,r1,8-2.2 關(guān)係運(yùn)算子 關(guān)係運(yùn)算子有小於、小於等於、大於、大於等於、等於、及不等於,用、=、=、及!=來表示。詳如下表:,小於關(guān)係運(yùn)算子的範(fàn)例如下: 3 int a,b,c; 4 a=6; main 0xe3a01006 * mov r1,#6 5 b=2; 000080ac 0xe3a02002 mov r2,#2 c=ab; 000080b0 0xe1510002 cmp r1,r2 000080b4 0xaa000001 bge 0x80c0 ; (main + 0x18) 000080b8 0xe3a00001 mov r0,#1 000080bc 0xea000000 b 0x80c4 ; (main + 0x1c) 000080c0 0xe3a00000 mov r0,#0 000080c4 0xe1a03000 mov r3,r0 由上面範(fàn)例可知小於關(guān)係運(yùn)算子是利用cmp指令來設(shè)計(jì),並利用分支指令b及其條件執(zhí)行參數(shù)命令ge配合來達(dá)到將運(yùn)算結(jié)果真1或假0利用將r0暫存再指定到c變數(shù)r3來儲存。,8-2.3 邏輯運(yùn)算子 邏輯運(yùn)算子有且、或、及非分用&、|、及!來表示。詳如下表:,“且”邏輯運(yùn)算子的範(fàn)例如下: 3 int a,b,c; 4 a=6; main 0xe3a01006 * mov r1,#6 5 b=2; 000080ac 0xe3a02002 mov r2,#2 6 c=a (main + 0x24) 000080c8 0xe3a00000 mov r0,#0 000080cc 0xe1a03000 mov r3,r0 在上面範(fàn)例您有發(fā)現(xiàn)“且”具備捷徑Shortcut的功能,當(dāng)變數(shù)a為假時(shí)則可以不需要考慮到變數(shù)b,此一作用我們稱為捷徑,若變數(shù)a為真時(shí)才需要測試變數(shù)b是否為真,當(dāng)變數(shù)a及b都為真時(shí),“且”關(guān)係運(yùn)算子才會(huì)傳回真0,否則傳回假0。,8-2.4 指定運(yùn)算子 指定運(yùn)算子是用等號=來表示,要特別注意它具備指定的功能而非等於,它會(huì)把等號右側(cè)的常數(shù)值或變數(shù)值指定到等號左手邊的變數(shù)上。指定即為拷貝因此當(dāng)指定運(yùn)算子執(zhí)行後,左側(cè)變數(shù)會(huì)等於右側(cè)計(jì)算後的結(jié)果,由於前面已使用過,在此不詳述。 8-2.5 增減運(yùn)算子 增減運(yùn)算子就是加1或減1分別使用+和來表示。,其範(fàn)例反組譯程式列表如下: 3 int a,b; 4 b=a+; main 0xe1a02001 * mov r2,r1 000080ac 0xe2811001 add r1,r1,#1 5 b=+a; 000080b0 0xe2810001 add r0,r1,#1 000080b4 0xe1a01000 mov r1,r0 000080b8 0xe1a02000 mov r2,r0 6 b=a-; 000080bc 0xe1a02001 mov r2,r1 000080c0 0xe2411001 sub r1,r1,#1 7 b=-a; 000080c4 0xe2410001 sub r0,r1,#1 000080c8 0xe1a01000 mov r1,r0 000080cc 0xe1a02000 mov r2,r0,8-2.6 條件運(yùn)算子 條件運(yùn)算子是一個(gè)三元運(yùn)算子,它以?和:來組成,其語法如下: exp1 ? exp2 : exp3 當(dāng)exp1條件運(yùn)算為真時(shí),則傳回exp2運(yùn)算值否則傳exp3運(yùn)算值,其範(fàn)例如下: a = 10; b = 15; x = (a b) ? a : b 在上面範(fàn)例當(dāng)變數(shù)a大於b時(shí),則將變數(shù)x內(nèi)容指定成a否則指定成b。其反組譯程式碼列表如下: 3 int a,b,c; 4 a=1; main 0xe3a01001 * mov r1,#1 5 b=2; 000080ac 0xe3a02002 mov r2,#2 6 c=(ab)?a:b; 000080b0 0xe1510002 cmp r1,r2 000080b4 0xda000001 ble 0x80c0 ; (main + 0x18) 000080b8 0xe1a00001 mov r0,r1 000080bc 0xea000000 b 0x80c4 ; (main + 0x1c) 000080c0 0xe1a00002 mov r0,r2 000080c4 0xe1a03000 mov r3,r0,8-2.7 位元運(yùn)算子 位元運(yùn)算子即為位元運(yùn)算指令,有且、或、互斥、非、向右位移、及向左位移,用&、|、及來表示。詳如下表:,圖 8-1 顯示且位元運(yùn)算子的運(yùn)算結(jié)果,在圖中您可以發(fā)現(xiàn)且位元運(yùn)算子&,使用and指令來組譯。當(dāng)變數(shù)a和b分別指定為3和2時(shí),再執(zhí)行且位元運(yùn)算式c=a&b後,變數(shù)c的結(jié)果為2,有興趣的讀者不妨把這些數(shù)值用二進(jìn)位來表示,然後再執(zhí)行且位元運(yùn)算子&後,就可以得知為何是2。,圖8-1 且位元運(yùn)算子執(zhí)行結(jié)果,8-2.8 特殊運(yùn)算子 最後我們來看特殊運(yùn)算子,分列如下: 逗號運(yùn)算子(comma operator) value = (x = 10, y = 5, x + y); 變數(shù)大小運(yùn)算子(size of operator) sizeof m = sizeof (sum); 指標(biāo)運(yùn)算子(pointer operators) (& and *) 成員選取運(yùn)算子(member selection operators) (. and -),8-3 全域變數(shù)和區(qū)域變數(shù): 變數(shù)主要是用來讓程式設(shè)計(jì)者暫時(shí)存放數(shù)值的地方,當(dāng)您有需要時(shí)可以將它取出或修改它。在C語言中變數(shù)可分成兩大類: 全域變數(shù) 宣告在程式開頭處即為函式外面,其範(fàn)圍涵蓋所有函式。通常使用記憶體空間來存放。 區(qū)域變數(shù) 宣告在函式內(nèi)部,都以是暫存器或堆疊來存放,其使用範(fàn)圍僅限於函式內(nèi)部。 以下為全域變數(shù)和區(qū)域變數(shù)的程式範(fàn)例:,/採用全域變數(shù) int a, b, c; int main() a=1; b=1; c = a+b; return 0; /採用區(qū)域變數(shù) int main() int a, b, c; a=1; b=1; c = a+b; return 0; ,上面範(fàn)例看起來程式長度一樣,但我們利用反組譯功能,您會(huì)發(fā)現(xiàn)多使用區(qū)域變數(shù)會(huì)提高程式的效能,其程式列表如下圖:,圖8-2 全域變數(shù)及區(qū)域變數(shù)效能比較,8-4 指標(biāo)變數(shù): 指標(biāo)變數(shù)簡單來說是一種指位器,該變數(shù)儲存不是數(shù)值內(nèi)容而是位址,我們可以使用*來宣告,使用如下: int *p; 在計(jì)算指標(biāo)的大小時(shí),可分成編譯階段得知或執(zhí)行階段得知,編譯階段得知範(fàn)例如下: int *p; p=p+1; 我們得知每次增加4位元組,因?yàn)橹笜?biāo)的資料型態(tài)為整數(shù)佔(zhàn)四個(gè)位元組。但有些情形不易得知,例如: int *p; int i=4; p=p+i; 在此情形則需要執(zhí)行階段才能獲知,則編譯器會(huì)使用ADD指令來處理。C語言最迷人地方在於它擁有指標(biāo)功能,但也是它可怕的地方。圖8-3展示其可怕之處,從圖中您會(huì)得知指標(biāo)居然指到位址0,而且我們把它改成1。從此您可以得知指標(biāo)能修改記憶體的內(nèi)容,但必須要非常小心,否則您會(huì)把重要的程式或資料給修改,造成不可預(yù)測的結(jié)果。,圖8-3 危險(xiǎn)指標(biāo),圖8-4 指標(biāo)一定要指向變數(shù),圖8-4說明將變數(shù)指向變數(shù),您會(huì)發(fā)現(xiàn)我們可以安全地變更p指標(biāo)所指變數(shù)的內(nèi)容,在圖中a變數(shù)為0xc000而p變數(shù)則為0xc004。,8-5 條件敍述: C語言條件敍述有if和switch兩種,if又可搭配else使用。if範(fàn)例如下: if (ab) c=a; else c=b; 上述程式說明當(dāng)ab條件成立時(shí)c變數(shù)指定為變數(shù)a的內(nèi)容否則指定為變數(shù)b。當(dāng)上面範(fàn)例組譯成組合語言時(shí),可以反組譯成下面: CMP r0,r1 ;if(ab) MOVGT r2,r0 ;c=a MOVLE r2,r1 ;else c=b 以下程式碼是C與組合語言混合寫法,詳細(xì)語法請參照8-8節(jié)。首先使用AXD模擬針對if.else的C語言程式碼如下,並進(jìn)行C的反組譯如下圖8-5灰色字所示,執(zhí)行結(jié)果,由於A小於B所以執(zhí)行A加B的動(dòng)作,結(jié)果在Global Variable 的值A(chǔ)等於9,B等於5。 int a=4,b=5; int Main(void) if (ab) L a=a-b; else a=a+b; return 0;,圖 8-5 if.else範(fàn)例程式示意圖,接下來我們來看另一個(gè)敍述switch,其語法如下: switch (條件表示式) case 常數(shù)1: 敍述區(qū)塊1;break; case常數(shù)2: 敍述區(qū)塊2;break; case常數(shù)N: 敍述區(qū)塊N;break; default: 敍述區(qū)塊d;break; ARM在支援switch指令採用,有時(shí)會(huì)採取跳躍表格方式處理,利用一表格來儲存各常數(shù)值的目的地,其指令樣板如下: ;r0 包含條件表示式的數(shù)值 ADR r1,JUMPTABLE ;取得跳躍表格的基值 CMP r0,#TABLEMAX ;表格最大值 LDRLS pc,r1,r0,LSL#2 ;改變PC值來進(jìn)行跳躍 B Exit L1: B Exit LN Exit ,以下程式碼是C與組合語言混合寫法,詳細(xì)語法請參照8-8節(jié)。首先使用AXD模擬針對switchcase 的C語言程式碼如下,並進(jìn)行C的反組譯如下圖8-6灰色字所示,執(zhí)行結(jié)果,由於B減A等於2,所以會(huì)執(zhí)行case 2這段程式碼,B減A的動(dòng)作,結(jié)果如下圖8-6在Global Variable 的值A(chǔ)等於2,B等於5。 int a=3,b=5; int Main(void) *9* switch (b-a) case 1:a=a+b;break; case 2:a=b-a;break; return 0; ,圖 8-6 switch.case範(fàn)例程式示意圖,8-6 迴圈敍述: C語言支援三種迴圈敍述有for、while、dowhile。for範(fàn)例如下: for (i=0;i10;i+) ai=0; 由於上面範(fàn)例僅將陣列10個(gè)元素全數(shù)設(shè)定為零,因此在組譯成組合語言時(shí),可以利用在迴圈外增加指令MOV r0,#0,來加速指令的執(zhí)行,其反組譯為: MOV r1,#0 ADR r2,#a0 MOV r0,#0 ;i=0 LOOP CMP r0,#10 BGE Exit STR r1, r2,r0,LSL #2 ADD r0,r0,#1 B LOOP Exit,以下程式碼是C與組合語言混合寫法,詳細(xì)語法請參照8-8節(jié)。首先使用AXD模擬針對for next的C語言程式碼如下,並進(jìn)行C的反組譯如下圖8-7灰色字所示,執(zhí)行結(jié)果,由於I小5,所以會(huì)執(zhí)行A=A+I這段程式碼5次,執(zhí)行過程0+1+2+3+4,所以A會(huì)一直累加I的值,結(jié)果如下圖8-7在Global Variable的值A(chǔ)等於10,I等於5。 int i,a; int Main(void) a=0; for (i=0;i5;i+) a=a+i; return 0; ,圖 8-7 fornext範(fàn)例程式示意圖,對於while迴圈則較簡單,可以使用下列組合語言程式來表示: LOOP ;插入條件判斷的指定 BEQ exit 迴圈本體 B LOOP Exit 以下程式碼是C與組合語言混合寫法,詳細(xì)語法請參照8-8節(jié)。首先使用AXD模擬針對while的C語言程式碼如下並進(jìn)行C的反組譯如下圖8-8灰色字所示,執(zhí)行結(jié)果,由於I小5,所以會(huì)執(zhí)行while這段程式碼會(huì)詢問6次,執(zhí)行結(jié)果為1+2+3+4+5,而詢問第六次時(shí),就會(huì)跳開while迴圈,而A會(huì)一直累加I的值,所以結(jié)果如下圖在Global Variable的值A(chǔ)等於15,I等於5。 int i,a; int Main(void) a=0,i=0; while (i5) i=i+1; a=a+i; return 0; ,圖 8-8 while範(fàn)例程式示意圖,對於dowhile迴圈則較簡單,可以使用下列組合語言程式來表示: LOOP ;插入迴圈本體程式 ;插入條件判斷的指定 BNE LOOP 以下程式碼是C與組合語言混合寫法,詳細(xì)語法請參照8-8節(jié)。首先使用AXD模擬針對do.while的C語言程式碼如下,並進(jìn)行C的反組譯如下圖8-9灰色字所示,執(zhí)行結(jié)果,由於I小5,所以會(huì)執(zhí)行dowhile這段程式碼只會(huì)執(zhí)行5次,執(zhí)行結(jié)果為1+2+3+4+5,而詢問第5次時(shí),就會(huì)直接跳開do.while迴圈,而A會(huì)一直累加I的值,所以結(jié)果如下圖8-9在Global Variable的值A(chǔ)等於15,I等於5。 int i,a; int Main(void) a=0,i=0; do i=i+1; a=a+i; while (i5) ; return 0; ,圖 8-9 do.while範(fàn)例程式示意圖,8-7 程式呼叫標(biāo)準(zhǔn): ARM支援一套程式呼叫的標(biāo)準(zhǔn)(ARM Procedure Call Standard),簡稱為APCS。APCS 定義下列內(nèi)容: 一般暫存器的特殊使用 堆疊指標(biāo)的使用 堆疊的資料格式 函式參數(shù)傳遞和傳值格式 支援ARM共用函式庫,其參數(shù)使用暫存器如下表所示:,圖8-10 傳值呼叫範(fàn)例執(zhí)行結(jié)果,在使用函式時(shí),經(jīng)常會(huì)利用參數(shù)來傳遞數(shù)值,最常見的就是傳值呼叫(Call by Vakue)及傳址呼叫(Call by Address),其範(fàn)例如圖8-10和8-11所示。讀者請?zhí)貏e注意兩者在使用上的差異,它們之間的差別在於是否使用指標(biāo)。,圖8-11 傳址呼叫範(fàn)例執(zhí)行結(jié)果,上面兩個(gè)範(fàn)例,相信您已發(fā)現(xiàn)在Console的視窗,其執(zhí)行結(jié)果不同,傳值呼叫不會(huì)改變主程式的變數(shù)值然而傳址呼叫會(huì)。接下來我們來看看函式指標(biāo)如圖8-7所示,原來指標(biāo)不是只用來指向資料變數(shù),也可以用來指向函數(shù)本體。您可經(jīng)過下列三步驟,即可輕輕鬆鬆地使用函式指標(biāo),我們以指向swap函式當(dāng)成範(fàn)例。 步驟一、宣告函式指標(biāo)。 void *(pFn) (int a, int b); 步驟二、指定函式。 pFn = ,圖8-12 函式指標(biāo)範(fàn)例執(zhí)行結(jié)果,上面函式的反組譯程式列表如下: int main() main 0xe92d400e * stmfd r13!,r1-r3,r14 int a=1,b=2; 000080c0 0xe3a01001 mov r1,#1 000080c4 0xe58d1008 str r1,r13,#8 000080c8 0xe3a02002 mov r2,#2 000080cc 0xe58d2004 str r2,r13,#4 void (*pFn)(int *a, int *b); pFn= 000080d8 0xe28d1004 add r1,r13,#4 000080dc 0xe28d0008 add r0,r13,#8 000080e0 0xebfffff0 bl swap,printf (“a=%d, b=%dn“,a,b); 000080e4 0xe28f0010 add r0,pc,#0x10 ; #0x80fc 000080e8 0xe59d1008 ldr r1,r13,#8 000080ec 0xe59d2004 ldr r2,r13,#4 000080f0 0xeb000006 bl _printf return 0; 000080f4 0xe3a00000 mov r0,#0 000080f8 0xe8bd800e ldmfd r13!,r1-r3,pc 000080fc 0x64253d61 dcd 0x64253d61 a=%d 00008100 0x3d62202c dcd 0x3d62202c , b= 0x000a6425 dcd 0x000a6425 %d 雖然函式指標(biāo)是C語言的特色,而且具備強(qiáng)大的功能,但當(dāng)您看過反組譯程式後,您會(huì)發(fā)現(xiàn)在這個(gè)強(qiáng)大功能的背後,原來是使用ADD以及BL指令來完成,ADD指令用來取得傳址的位址,而BL指令則是用來呼叫副程式。若能善用指令的相互搭配就能創(chuàng)造迷人的功能,利用ADD及BL指令來設(shè)計(jì)函式指標(biāo)的功能,就是一個(gè)明顯的例子。,8-8 C與組合語言的混合撰寫設(shè)計(jì): 在應(yīng)用系統(tǒng)的程式設(shè)計(jì)中,若所有的編寫程式任務(wù)均用組合語言來完成,其工作量是可想而知的,同時(shí),不利於系統(tǒng)升級或應(yīng)用軟體移植,事實(shí)上,ARM體系結(jié)構(gòu)支援C/C以及與組合語言的混合編寫程式,在一個(gè)完整的程式設(shè)計(jì)的中,除了初始化部分用組合語言完成以外,其主要的編寫程式任務(wù)一般都用C 完成。 組合語言與C的混合編寫程式通常有以下幾種方式: 在C程式碼中嵌入編譯指令。 在組合語言程式和C的程式之間進(jìn)行變數(shù)的互傳。 組合語
溫馨提示
- 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)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司物資大比拼活動(dòng)方案
- 公司新年猜謎語活動(dòng)方案
- 公司氣氛活動(dòng)方案
- 公司茶點(diǎn)活動(dòng)方案
- 公司旅游北京策劃方案
- 公司線上抽獎(jiǎng)活動(dòng)方案
- 公司節(jié)日策劃方案
- 公司自助聚餐活動(dòng)方案
- 公司甜點(diǎn)活動(dòng)方案
- 公司百人以上團(tuán)建活動(dòng)方案
- 2025年陜西、山西、青海、寧夏高考政治試卷真題(含答案解析)
- 2025年 中國南水北調(diào)集團(tuán)新能源投資公司第一批中層及考試筆試試卷附答案
- 期末試卷(五)(含答案含聽力原文無聽力音頻)-2024-2025學(xué)年人教PEP版英語(新教材)三年級下冊
- 3.21 明清時(shí)期的科技與文化 課件 2024-2025學(xué)年統(tǒng)編版七年級歷史下冊
- 養(yǎng)老護(hù)理員四級考試題庫及答案
- 2024年中國中小企業(yè)融資發(fā)展報(bào)告
- 辦公室內(nèi)控管理制度
- 2025年高二語文下學(xué)期期末考試語言文字運(yùn)用專項(xiàng)練習(xí)含答案解析
- 2024-2025 學(xué)年八年級英語下學(xué)期期末模擬卷 (蘇州專用)原卷
- 安徽省宿州市碭山縣2023-2024學(xué)年八年級下學(xué)期期末數(shù)學(xué)試題
- 湖南2024生地會(huì)考試卷及答案
評論
0/150
提交評論