




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ARM匯編、C和C++混合編程
在C/C++程序中如果必須使用匯編指令來(lái)完成某些操作,可以采用兩種方法:1.采用內(nèi)嵌匯編:即在C/C++源程序中嵌入一塊匯編代碼;2.形成一個(gè)子程序:C/C++程序可以調(diào)用這些匯編程序來(lái)完成特定的操作。內(nèi)嵌匯編內(nèi)嵌匯編(inlineassembly)的語(yǔ)法如下:__asm{
指令[;指令]/*注釋*/ … [指令]}內(nèi)嵌匯編的指令用法內(nèi)嵌在C或者C++程序中的ARM匯編指令與普通(ADS)格式的ARM匯編指令有所不同。CPU的內(nèi)部寄存器資源使用有額外約束,以下講解內(nèi)嵌ARM匯編指令的用法。ARM內(nèi)嵌匯編程序的操作數(shù)內(nèi)嵌匯編指令中作為操作數(shù)的寄存器和常量可以是表達(dá)式。這些表達(dá)式可以是char,short或int類型,而且這些表達(dá)式都是作為無(wú)符號(hào)數(shù)進(jìn)行操作,編譯器將會(huì)計(jì)算這些表達(dá)式的值,并為其分配寄存器。ARM內(nèi)嵌匯編程序的物理寄存器內(nèi)嵌匯編程序中使用物理寄存器有以下限制。1.不能直接向PC寄存器賦值,程序跳轉(zhuǎn)只能使用B或BL指令實(shí)現(xiàn)2.不要使用過(guò)于復(fù)雜的C表達(dá)式,因?yàn)閷?huì)需要較多的物理寄存器,這將導(dǎo)致與其他指令中用到的物理寄存器產(chǎn)生使用沖突。
inttmp,r1;
__asm{MOVr1,1<<3MOVtmp,r1++MRStmp,CPSR //CPSR->tempORRtmp,tmp,#0x80 //置I位
MSRCPSR_c,tmp
//temp->CPSR}MOVR2,#0x00000008;r1<->R2MOVR0,R2ADDR2,R2,#0x00000001MOVR1,R0;tmp<->R1MRSR1,CPSRORRR1,R1,#0x00000080MSRCPSR_c,R1其他內(nèi)嵌匯編程序的編寫注意點(diǎn)常量:在內(nèi)嵌匯編指令中,常量前面的“#”可以省略。指令展開:內(nèi)嵌匯編指令中,如果包含常量操作數(shù),該指令可能被內(nèi)嵌匯編器展開成幾條指令。標(biāo)號(hào):C程序中的標(biāo)號(hào)可以被內(nèi)嵌的匯編指令使用,但是只有指令B可以使用C程序中的標(biāo)號(hào),而指令BL則不能使用。內(nèi)存單元的分配:所有的內(nèi)存分配均由C編譯器完成,分配的內(nèi)存單元通過(guò)變量供內(nèi)嵌匯編器使用。內(nèi)嵌匯編器不支持內(nèi)嵌程序中用于內(nèi)存分配的偽指令。#definea1int
main(void){chartmp;
intr1=0;__asm{MOVtmp,a*aMOVtmp,a==1 MOVtmp,a^0xffffffff MOVtmp,r1<<=3}}MOVR0,#0x00000000;初始化MOVR2,#0x00000001;MOVtmp,a*aMOVR2,#0x00000001;MOVtmp,a==1MVNR2,#0x00000001;MOVtmp,a^0xffffffff
MOVR3,R0,LSL#3;MOVtmp,r1<<=3MOVR0,R3MOVR1,R3MOVR0,R1MOVR2,R0內(nèi)嵌匯編程序中的SWI和BL指令SWI和BL指令:在兩個(gè)指令使用到內(nèi)嵌匯編中,除了正常的操作數(shù)域外,還必須增加以下3個(gè)可選的寄存器列表:
用于輸入?yún)?shù)的寄存器列表。
用于存儲(chǔ)返回結(jié)果的寄存器列表。
用于表示那些寄存器將有可能會(huì)被修改的寄存器列表。內(nèi)嵌匯編代碼舉例字符串復(fù)制#include<stdio.h>voidstr_cpy(constchar*src,char*dst){
int
ch; __asm { loop://普通ARM匯編代碼中的標(biāo)號(hào)后面不能跟冒號(hào)。C程序中
//的標(biāo)號(hào)可以被內(nèi)嵌的匯編指令使用。ARM內(nèi)嵌匯編代碼中
//只有B指令可以使用C的標(biāo)號(hào),而BL指令不能夠使用C代碼
//的標(biāo)號(hào)。C程序的標(biāo)號(hào)后面跟冒號(hào),由Goto語(yǔ)句轉(zhuǎn)向標(biāo)號(hào)處。
LDRB ch,[src],#1 STRB ch,[dst],#1 CMPch,#0 BNE loop }}LDRBr2,[r0],#1STRBr2,[r1],#1CMPr2,#0BNE{pc}-0xc;0x0MOVpc,r14內(nèi)嵌匯編代碼舉例字符串復(fù)制int
main(void){ constchar*a="Helloworld!\n"; charb[20]; __asm { MOVR0,a//將串a(chǎn)的串首地址送到R0寄存器
MOVR1,b//將串b的串首地址送到R1寄存器
BLstr_cpy,{R0,R1}//調(diào)用C函數(shù)str_cpy() }
printf("Originalstring:%s\n",a);
printf("Copiedstring:%s\n",b);//半主機(jī)方式顯示復(fù)制前后的兩個(gè)串
return(0);}STMFDr13!,{r4,r14}SUBr13,r13,#0x18ADDr4,pc,#0x2c;#0x50MOVr0,r4ADDr1,r13,#4BLstr_cpy;0x0MOVr1,r4ADDr0,pc,#0x28;#0x60BL_printfADDr1,r13,#4ADDr0,pc,#0x34;#0x78BL_printfMOVr0,#0ADDr13,r13,#0x18LDMFDr13!,{r4,pc}內(nèi)嵌匯編器與armasm匯編器差異
內(nèi)嵌匯編器不支持通過(guò)“.”指示符或PC值來(lái)獲取當(dāng)前指令的地址。不支持“LDRLRn,=expr”偽指令,而使用“MOVRn,expr”指令向寄存器賦值。
不支持標(biāo)號(hào)表達(dá)式。
不支持ADR和ADRL偽指令。不支持BX指令。不能向PC直接賦值。當(dāng)使用8位移位常數(shù)導(dǎo)致CPSR的ALU標(biāo)志更新時(shí),N、Z、C和V標(biāo)志中的C不具有真實(shí)意義。
C/C++程序與ARM匯編語(yǔ)言程序的相互調(diào)用
C/C++程序與匯編程序相互調(diào)用時(shí),應(yīng)遵守相應(yīng)的ATPCS,主要有五種調(diào)用。ARM匯編子程序調(diào)用C語(yǔ)言子程序ARM匯編子程序調(diào)用C++語(yǔ)言子程序C語(yǔ)言程序調(diào)用ARM匯編語(yǔ)言子程序C++語(yǔ)言程序調(diào)用ARM匯編語(yǔ)言子程序C語(yǔ)言程序調(diào)用C++語(yǔ)言子程序ATPCSATPCS(ARM-ThumbProcedureCallStandard)規(guī)定了一些子程序間調(diào)用的基本規(guī)則。使用ADS的C語(yǔ)言編譯器編譯的C語(yǔ)言子程序滿足用戶指定的ATPCS類型。而對(duì)于匯編語(yǔ)言來(lái)說(shuō),則需要用戶來(lái)保證各個(gè)子程序滿足ATPCS的要求。AAPCS2007年ARM公司正式推出了AAPCS標(biāo)準(zhǔn)ARMArchtectureProcedureCallStandardAAPCS是ATPCS的改進(jìn)版目前,AAPCS和ATPCS都是可用的標(biāo)準(zhǔn)寄存器的使用規(guī)則子程序間通過(guò)寄存器R0~R3來(lái)傳遞參數(shù)。這時(shí),寄存器R0~R3可記作a0~a3。在子程序中,使用寄存器R4~R11來(lái)保存局部變量。這時(shí),寄存器R4~R11可以記作v1~v8。寄存器R12用作過(guò)程調(diào)用中間臨時(shí)寄存器,記作IP。在子程序之間的連接代碼段中常常有這種使用規(guī)則。寄存器的使用規(guī)則(續(xù))寄存器R13用作堆棧指針,記作SP。寄存器SP在進(jìn)入子程序時(shí)的值和退出子程序時(shí)的值必須相等。寄存器R14稱為連接寄存器,記作LR。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14則可以用作其他用途。寄存器R15是程序計(jì)數(shù)器,記作PC。它不能用作其它用途。堆棧使用規(guī)則ATPCS規(guī)定堆棧為FD類型,即滿遞減堆棧,并且對(duì)堆棧的操作是8字節(jié)對(duì)齊。對(duì)于匯編程序來(lái)說(shuō),如果目標(biāo)文件中包含了外部調(diào)用,則必須滿足下列條件:(1)外部接口的堆棧必須是8字節(jié)對(duì)齊的。(2)在匯編程序中使用PRESERVE8偽指令告訴連接器,本匯編程序數(shù)據(jù)是8字節(jié)對(duì)齊的。參數(shù)個(gè)數(shù)可變子程序參數(shù)傳遞規(guī)則
在傳遞參數(shù)時(shí),依次將各字?jǐn)?shù)據(jù)傳遞到寄存器R0,R1,R2和R3中。如果參數(shù)多于4個(gè),則將剩余的字?jǐn)?shù)據(jù)傳遞到堆棧中。入棧的順序與參數(shù)傳遞順序相反,即最后一個(gè)字?jǐn)?shù)據(jù)先入棧。子程序結(jié)果返回規(guī)則結(jié)果為一個(gè)32位整數(shù)時(shí),可以通過(guò)寄存器R0返回;結(jié)果為一個(gè)64位整數(shù)時(shí),可以通過(guò)寄存器R0和Rl返回;結(jié)果為一個(gè)浮點(diǎn)數(shù)時(shí),可以通過(guò)浮點(diǎn)運(yùn)算部件的寄存器f0、d0或s0來(lái)返回;對(duì)于位數(shù)更多的結(jié)果,需要通過(guò)內(nèi)存來(lái)傳遞。C/C++程序調(diào)用ARM匯編子程序要點(diǎn)設(shè)計(jì)匯編程序必須遵守ATPCS,保證程序調(diào)用時(shí)參數(shù)的正確傳遞。在匯編程序中使用EXPORT指示符聲明本程序可以被別的程序調(diào)用。在C語(yǔ)言程序中使用extern關(guān)鍵詞聲明該匯編程序可以被調(diào)用,C++語(yǔ)言程序使用extern“C”來(lái)聲明該匯編程序可以被調(diào)用。例1C程序調(diào)用ARM匯編子程序/*main_0522.csemihostingoutputmode*/#include<stdio.h>externint
asmfile(intarg1,intarg2,intarg3);int
main(void){inta1=1,a2=2,a3=4;printf("ExampleofCProgramcallingAssemblyprogram!\n");printf("(%d+%d+%d)*600=%d\n",a1,a2,a3,asmfile(a1,a2,a3));return(0);}C程序調(diào)用ARM匯編子程序(續(xù));ASM_0522.sEXPORTasmfileAREAMy_pro,CODE,READONLYasmfile
STMFDSP!,{R4-R6,R8,R7} addr0,r0,r1 addr0,r0,r2
mov r4,#600
mulr3,r0,r4
mov r0,r3 LDMFDSP!,{R4-R6,R8,R7}
movpc,lr END例2ARM匯編程序調(diào)用C語(yǔ)言子程序本案例程序比較兩個(gè)IP地址的大小,a1~a4存放IP地址1的值(按照ATPCS傳遞參數(shù)),b1~b4存放IP地址2的值(通過(guò)棧傳遞參數(shù)),如果IP地址1的值大于IP地址2的值則返回1,如果IP地址1的值小于IP地址2的值則返回-1,如果兩者相等則返回零。IP地址1取值:192.168.1.152IP地址2取值:
172.0.0.151
例2ARM匯編程序調(diào)用C子程序/*C代碼部分*/#include<stdio.h>externint
function(void);/*聲明function是外部函數(shù)*/int
compare_ip(inta1,inta2,inta3,inta4,intb1,intb2,intb3,intb4){ if(a1!=b1) returna1>b1?1:-1; if(a2!=b2) returna2>b2?1:-1; if(a3!=b3) returna3>b3?1:-1; if(a4!=b4) returna4>b4?1:-1; return0;}intmain(){
printf("Thisisaexampleofsemihosting\n");
printf("resultis%d\n",function());}例2ARM匯編調(diào)用C子程序 AREAFUNCTION,CODE,READONLY;ARM匯編子程序 IMPORTcompare_ip EXPORTfunctionfunction STMFD r13!,{r0-r3,r14};保存寄存器到棧區(qū) MOV r3,#0x97;存入IP地址2的4個(gè)數(shù),0x97=151 MOV r2,#0 ;存入0 MOV r1,#0 ;存入0 MOV r0,#0xac ;存入0xac=172 STMIA r13,{r0-r3} ;R0-R3覆蓋存入棧區(qū)的R0-R3位置 MOV r3,#0x98 ;存入IP地址1的4個(gè)數(shù),0x98=152 MOV r2,#1 ;存入1 MOV r1,#0xa8;存入0xa8=168 MOV r0,#0xc0 ;存入0xc0=192 BL compare_ip;調(diào)用C語(yǔ)言函數(shù)進(jìn)行IP值比較 ADD r13,r13,#0x10 ;棧指針上移4個(gè)字(元素) LDR pc,[r13],#4 ;將保存的r14值加載到PC,而后r13加4 END
例2ARM匯編調(diào)用C子程序ARM匯編語(yǔ)言子程序Function的棧區(qū)操作圖解ARM匯編(子)程序的相互調(diào)用基本要點(diǎn):如果一個(gè)ARM匯編語(yǔ)言程序文件含有調(diào)用外部匯編語(yǔ)言程序文件中子程序(函數(shù))的指令,則需要用IMPORT指示符來(lái)指明將要調(diào)用的子程序名稱。如果本匯編語(yǔ)言程序文件中的某個(gè)子程序(函數(shù)),需要被外部的ARM匯編語(yǔ)言程序文件中的語(yǔ)句調(diào)用,則需要用EXPORT指示符來(lái)指明將要被調(diào)用的子程序(函數(shù))名稱。被執(zhí)行的匯編子程序在運(yùn)行前,要注意將寄存器組壓入棧區(qū),返回時(shí)要注意將棧區(qū)保存的工作現(xiàn)場(chǎng)恢復(fù)到處理器的寄存器組。例3ARM匯編子程序嵌套調(diào)用這里給出的ARM匯編程序嵌套調(diào)用范例程序做如下計(jì)算:求自然數(shù)1到n的階乘的總和例3ARM匯編子程序嵌套調(diào)用#include<stdio.h>externint
asmFac(intn);struct
factorial_sum{int
cal_fn;int
sum_fn;intfn[9];};externstruct
factorial_sum*summing(struct
factorial_sum*arg1);例3ARM匯編子程序嵌套調(diào)用int
main(void){
intj;
struct
factorial_sum
fac={9,0,{1,1,1,1,1,1,1,1,1} };//設(shè)置參數(shù)
struct
factorial_sum*result; //申請(qǐng)變量作為返回值
printf("ExampleofamultiAssemblyprogramcalling!\n"); result=summing(&fac); //調(diào)用求和函數(shù)R0存放的是FAC變量的首地址
printf("Thetotalsumis%d\n",result->sum_fn);//輸出結(jié)果
for(j=0;j<9;j++){
printf("%d\t",(result->fn)[j]); } }例3ARM匯編子程序嵌套調(diào)用EXPORTsummingIMPORTasmFac ;說(shuō)明用到了其他文件中的子匯編程序
AREASUMMING,CODE,READONLYsumming
stmfd sp!,{r4-r5}
ldr r1,[r0] ;r1=cal_fn
mov r2,#1 ;將r2設(shè)置為當(dāng)前需要計(jì)算的階乘數(shù), ;它從1變化到cal_fn add r3,r0,#8 ;將r3指向fn數(shù)組
mov r5,#0 ;r5為總和,初始值置為0loop
cmp r1,r2 ;將cal_fn與當(dāng)前所需計(jì)算的階乘值比較
blt back ;如果小于,則返回例3ARM匯編子程序嵌套調(diào)用
STMFDsp!,{r0-r3,lr};保存r0~r3,lr ;因?yàn)檎{(diào)用了外部文件的匯編子程序
mov r0,r2 ;將r0設(shè)置為當(dāng)前所需計(jì)算的階乘值
bl
asmFac ;調(diào)用階乘函數(shù)
mov r4,r0 ;將返回值(階乘)存在r4中
ldmfd SP!,{R0-R3,lr};恢復(fù)先前保存的寄存器值
str r4,[r3] ;將計(jì)算所得的階乘值存入數(shù)組中
add r3,r3,#4 ;將r3指向數(shù)組的下一個(gè)
add r5,r5,r4 ;將階乘值加入總和
add r2,r2,#1 ;計(jì)算下一個(gè)階乘
bloop ;循環(huán)back
str r5,[r0,#4] ;將計(jì)算所得的總和存入結(jié)構(gòu)體中
ldmfd SP!,{R4-R5} ;恢復(fù)寄存器值
mov pc,lr ;summing子程序返回
END ;匯編代碼結(jié)束例3ARM匯編子程序嵌套調(diào)用;這個(gè)ARM匯編函數(shù)也可以被C函數(shù)調(diào)用,符合ATPCS規(guī)范;int
asmFac(intn)EXPORTasmFacAREAASMFILE,CODE,READONLYasmFac
mov r1,r0 ;r1=nloop subs r1,r1,#1;將r1減1
mulgt r0,r1,r0;如果大于0,則乘上r1(相當(dāng)與n*(n-1))
bgt loop ;如果大于0,繼續(xù)
movpc,lr ;asmFac子程序返回
END ;匯編代碼結(jié)束例4ARM匯編子程序嵌套調(diào)用#include<stdio.h>intmain(){
printf("Helloworld\n"); return0;};Example7_asm.sAREAAsm_C,CODE,READONLYENTRY LDR SP,=0x4000 IMPORT __main BL __main B . END系統(tǒng)的初始化過(guò)程
初始化代碼:在用戶的應(yīng)用程序運(yùn)行之前完成系統(tǒng)初始化工作的代碼初始化代碼直接對(duì)ARM微處理器內(nèi)核及硬件控制器編程,多采用匯編語(yǔ)言編程,初始化代碼一般應(yīng)包含如下典型任務(wù):定義程序入口點(diǎn)設(shè)置異常向量初始化存儲(chǔ)器系統(tǒng)初始化堆棧指針寄存器初始化臨界I/O設(shè)備初始化C代碼的運(yùn)行環(huán)境改變處理器的運(yùn)行模式和狀態(tài)使能中斷進(jìn)入C代碼運(yùn)行系統(tǒng)的初始化過(guò)程
ARM微處理器在復(fù)位或上電狀態(tài)下的默認(rèn)模式為管理模式(SupervisorMode),而在初始化代碼中可能需要切換到其他模式進(jìn)行必要的操作,如初始化各個(gè)模式下的堆棧指針寄存器,因此,在系統(tǒng)的初始化過(guò)程中處理器模式一般會(huì)經(jīng)歷如下變化:(1)初始化存儲(chǔ)設(shè)備(2)初始化堆棧空間(3)初始化必要的硬件設(shè)備(1)匯編程序入口(2)系統(tǒng)初始化,設(shè)置中斷向量(3)關(guān)看門狗及中斷IMPORT__mainLDRlr,=__mainMOVpc,lr__main__scatterload(1)把RW/RO段從裝載域復(fù)制到相應(yīng)的RAM中(即運(yùn)行域)(2)初始化ZI段__rt_entry(1)初始化庫(kù)函數(shù)(2)建立堆棧(3)調(diào)用main()(4)退出應(yīng)用(5)用main()函數(shù)的返回值做為exit()參數(shù)
main()系統(tǒng)的初始化過(guò)程進(jìn)入C代碼運(yùn)行 最簡(jiǎn)單的情況:
IMPORT C_Entry
;定義一個(gè)外部標(biāo)號(hào),一般不使用main
B C_Entry
;跳轉(zhuǎn)到該處執(zhí)行
在ARM的ADS編譯環(huán)境中,還另外提供了一種進(jìn)入C代碼的機(jī)制:
IMPORT __main B __main
__main()是編譯器提供的一個(gè)函數(shù),負(fù)責(zé)完成庫(kù)函數(shù)的初始化和對(duì)C代碼運(yùn)行環(huán)境的初始化,最后自動(dòng)跳轉(zhuǎn)到main()函數(shù)執(zhí)行,此時(shí)應(yīng)用程序的主函數(shù)名必須是main()。 用戶可以根據(jù)需要選擇是否使用__main()函數(shù),如果想讓系統(tǒng)自動(dòng)完成初始化過(guò)程,可以使用__main()函數(shù);如果所有的初始化過(guò)程都由用戶自己完成,則不使用__main()函數(shù)。系統(tǒng)的初始化過(guò)程定義程序入口點(diǎn) 初始化代碼必須定義整個(gè)程序的入口點(diǎn)(EntryPoint)
偽操作Entry
鏈接器的設(shè)置 確定整個(gè)程序的入口點(diǎn)系統(tǒng)的初始化過(guò)程設(shè)置異常向量
AREA Init,CODE,READONLY ENTRY B Reset_Handler
B Undef_Handler B SWI_Handler B PreAbort_Handler B DataAbort_Handler B . B IRQ_Handler B FIQ_HandlerReset_Handler
系統(tǒng)的初始化過(guò)程初始化存儲(chǔ)器系統(tǒng)
初始化存儲(chǔ)器系統(tǒng)主要包含對(duì)系統(tǒng)存儲(chǔ)器控制器的初始化,如果系統(tǒng)具有存儲(chǔ)器管理單元(MMU),也必須對(duì)其進(jìn)行初始化。 基于ARM微處理器的系統(tǒng)一般都需要外擴(kuò)大容量的存儲(chǔ)器,這些存儲(chǔ)器需要專門的存儲(chǔ)器控制器控制其讀、寫操作。系統(tǒng)的初始化過(guò)程存儲(chǔ)器的地址分配與地址重映射(Remap)
存儲(chǔ)器的地址分配也就是將物理存儲(chǔ)器定位在4GB地址空間的具體位置
ARM微處理器常采用兩種方式來(lái)完成地址分配:固定的存儲(chǔ)器地址分配存儲(chǔ)器地址重映射(Remap)
系統(tǒng)的初始化過(guò)程FLASH中斷向量表程序(RO)RAM堆棧數(shù)據(jù)數(shù)據(jù)(RO)FLASH中斷向量表程序(RO)內(nèi)部RAM數(shù)據(jù)(RW)內(nèi)部RAM中斷向量表FLASH堆棧程序數(shù)據(jù)外部SRAMSDRAM外部SRAMSDRAM4G存儲(chǔ)空間4G存儲(chǔ)空間4G存儲(chǔ)空間固定的存儲(chǔ)器地址分配存儲(chǔ)器地址重映射(Remap)系統(tǒng)的初始化過(guò)程初始化堆棧指針寄存器
SP_svc
SP_irq
SP_fiq
SP_abt
SP_und
SP_usr系統(tǒng)的初始化過(guò)程初始化堆棧的示例代碼,共初始化了三種模式下的堆棧指針寄存器:
MODEMASK EQU 0x1F FIQMODE EQU 0x11 IRQMODE EQU 0x12 SVCMODE EQU 0x13
SVCStack
EQ
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 兒童預(yù)防疾病總結(jié)
- 2025西安思源學(xué)院輔導(dǎo)員考試試題及答案
- 2025貴州民族大學(xué)輔導(dǎo)員考試試題及答案
- 2025蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院輔導(dǎo)員考試試題及答案
- 2025年廣東省深圳市龍崗區(qū)中考?xì)v史二模試卷
- 初中生的衛(wèi)生管理要點(diǎn)
- 內(nèi)蒙古中鐵水務(wù)集團(tuán)有限公司招聘筆試題庫(kù)2025
- 裝修設(shè)計(jì)方案模板
- 水設(shè)計(jì)說(shuō)明方法
- T/YNIA 005-2022熱風(fēng)粘合法非織造材料
- 傳染病法律法規(guī)培訓(xùn)課件
- 高中地理學(xué)業(yè)水平合格性考試必修二知識(shí)點(diǎn)總結(jié)(會(huì)考)
- 職業(yè)升學(xué)就業(yè)協(xié)議書
- 旅行導(dǎo)游協(xié)議書
- 2024年新牛津譯林版三年級(jí)上冊(cè)英語(yǔ) Unit 1 Hello!第三課時(shí)
- 2025屆百師聯(lián)盟高三下學(xué)期二輪復(fù)習(xí)聯(lián)考(三)地理試題(含答案)
- 新能源合伙人合同8篇
- 節(jié)目腳本委托合同協(xié)議
- 2025年下半年河北省邢臺(tái)路橋建設(shè)總公司招聘50人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- (二模)青島市2025年高三年級(jí)第二次適應(yīng)性檢測(cè)地理試卷(含標(biāo)準(zhǔn)答案)
- 海林市社區(qū)工作者招聘真題2024
評(píng)論
0/150
提交評(píng)論