版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章ARM體系結(jié)構(gòu)
ARM指令系統(tǒng)ARM指令系統(tǒng)
132ARM指令集ARM指令格式ARM尋址方式數(shù)據(jù)處理指令(22種)跳轉(zhuǎn)指令(4種)Load/Store指令(16種)程序狀態(tài)寄存器指令(2種)協(xié)處理器指令(5種)軟件中斷指令(2種)取指令指令地址計算指令譯碼操作數(shù)地址計算數(shù)據(jù)操作操作數(shù)地址計算取操作數(shù)存操作數(shù)指令完成取下一條多操作數(shù)多結(jié)果CPU訪問存儲器或I/OCPU內(nèi)部操作機(jī)器指令機(jī)器指令:機(jī)器指令是CPU能直接識別并執(zhí)行的指令,每一個機(jī)器指令必須包含CPU執(zhí)行所需的全部信息,機(jī)器指令包括ARM指令集和Thumb指令集;機(jī)器指令要素操作碼(opcode)源操作數(shù)引用結(jié)果操作數(shù)引用下一指令引用做何操作?對誰做此操作?如何尋找被操作數(shù)據(jù)的寄存器或存儲器位置?完成后到哪里去取下一個操作?機(jī)器指令通常由操作碼和操作數(shù)兩部分組成,操作碼指出該指令所要完成的操作,即指令的功能,操作數(shù)指出參與運算的對象,以及運算結(jié)果所存放的位置等。ARM指令的助記符ARM指令在匯編程序中用助記符表示,一般ARM指令的助記符格式為:
<opcode>{<cond>}{S}<Rd>,<Rn>,{<op2>}
其中:<opcode>操作碼,如ADD表示算術(shù)加操作指令;{<cond>}決定指令執(zhí)行的條件域;{S}決定指令執(zhí)行是否影響CPSR寄存器的值;<Rd>目的寄存器;<Rn>第一個操作數(shù),為寄存器;<op2>第二個操作數(shù)。例如,指令A(yù)DDEQSR1,R2,#5
ARM指令的編碼格式實際指令語法格式為:
ADDEQSR0,R1,R2;
該指令的編碼格式為:
31~2827~2524~212019~1615~1211~~~~~~~~~~0cond
opcodeSRnRdop200000010100100010000000000000010條件域<cond>幾乎所有的ARM指令都可以根據(jù)當(dāng)前程序狀態(tài)寄存器CPSR中標(biāo)志位的值,有條件地執(zhí)行。ARM指令的條件域<cond>有16種類型。
condCPSR中標(biāo)志位含
義EQZ置位相等NEZ清零不相等CSC置位無符號數(shù)大于或等于CCC清零無符號數(shù)小于MIN置位負(fù)數(shù)PLN清零正數(shù)或零VSV置位溢出VCV清零未溢出HIC置位Z清零無符號數(shù)大于LSC清零Z置位無符號數(shù)小于或等于GEN等于V帶符號數(shù)大于或等于LTN不等于V帶符號數(shù)小于GTZ清零且(N等于V)帶符號數(shù)大于LEZ置位或(N不等于V)帶符號數(shù)小于或等于AL忽略無條件執(zhí)行0000000100100011010001010110011110001001101010111100110111101111依版本不同,定義不同第4章ARM指令系統(tǒng)
132ARM指令集ARM指令格式ARM尋址方式數(shù)據(jù)處理指令(22種)跳轉(zhuǎn)指令(4種)Load/Store指令(16種)程序狀態(tài)寄存器指令(2種)協(xié)處理器指令(5種)軟件中斷指令(2種)尋址方式
寄存器尋址立即數(shù)尋址寄存器移位尋址寄存器間接尋址
基址變址尋址多寄存器尋址堆棧尋址塊復(fù)制尋址
相對尋址
尋址方式是根據(jù)指令中給出的地址碼字段來實現(xiàn)尋找真實操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。寄存器尋址寄存器尋址是指操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。在寄存器尋址方式下,寄存器的值即為操作數(shù)。ARM指令普遍采用此種尋址方式。例:
ADDR0,R1,R2; R0=R1+R2
該指令的執(zhí)行效果是將寄存器R1和R2的內(nèi)容相加,其結(jié)果存放在R0寄存器中。MOVR0,R1 ;R0
R1
R0=R1該指令的執(zhí)行效果是將寄存器R1的內(nèi)容傳送到寄存器R0中。寄存器尋址寄存器的值即為操作數(shù)OPRi操作數(shù)………………R0RiRn寄存器ADDR3,R3,#1;R3
R3+1ANDR8,R7,#0xff;R8R7[7:0]SUBR0,R0,#1;R0
R0-1第2個源操作數(shù)為一個立即數(shù),以“#”為前綴,十六進(jìn)制值以在“#”后加“0x”表示。立即尋址是一種特殊的尋址方式,指令中在操作碼字段后面的地址碼不是通常意義上的操作數(shù)地址,而是操作數(shù)本身。這樣的數(shù)稱為操作數(shù),也稱為立即數(shù)。立即尋址這種尋址方式是ARM指令集特有的,第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,先選擇進(jìn)行移位操作,再結(jié)合。ADDR3,R2,R1,LSL#3;R3
R2+8×R1MOVR0,R2,LSL,#3 ;R0
8×R2寄存器移位尋址移位操作在ARM指令集中不作為單獨的指令使用,ARM指令集共有5種位移操作。移位操作的5種類型:LSL:邏輯左移LSR:邏輯右移ASR:算術(shù)右移ROR:循環(huán)右移RRX:帶擴(kuò)展的循環(huán)右移,左端用c填充注:這種尋址方式是ARM指令集特有的ARM指令集的5種位移操作LSL邏輯左移:Rx,LSL<op1>寄存器中字的低端空出的位補(bǔ)0LSR邏輯右移:Rx,LSR<op1>寄存器中字的高端空出的位補(bǔ)0;ASR算術(shù)右移:Rx,ASR<op1>移位過程中保持符號位不變,若源操作數(shù)為正數(shù),則字的高端空出的位補(bǔ)0,否則補(bǔ)1;ARM指令集的5種位移操作ROR循環(huán)右移:Rx,ROR<op1>由字的低端移出的位填入字的高端空出的位;RRX帶擴(kuò)展的循環(huán)右移:Rx,RRX向右移位,只移一位,左側(cè)空位由狀態(tài)寄存器C位填充,右側(cè)移出的位移進(jìn)狀態(tài)位C中。寄存器間接尋址寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針。寄存器中的值為操作數(shù)的物理地址,而實際的操作數(shù)存放在存儲器中。例:LDRR0,[R1] ; R0
[R1]
STRR0,[R1] ; [R1]
R0
寄存器間接尋址使用一個寄存器(基址寄存器)的值作為存儲器的地址。第1條指令將寄存器R1指向的地址單元的內(nèi)容加載到寄存器R0中,第2條指令將寄存器R0存入寄存器R1指向的地址單元。寄存器間接尋址操作數(shù)主存OPRi地址………………R0RiRn寄存器寄存器中的值為操作數(shù)的物理地址
基址變址尋址就是將寄存器(該寄存器一般為基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,形成操作數(shù)的有效地址。基址變址尋址用于訪問基址附近的存儲單元,常用于查表、數(shù)組操作?;芳悠茖ぶ坊芳幼冎穼ぶ非白冎穼ぶ贩绞剑夯沸杓樱ɑ驕p)偏移(最大4KB)來計算訪問的地址。例如:LDRR0,[R1,#4];R0
[R1+4]這條指令把基址R1的內(nèi)容加上位移量4后所指向的存儲單元的內(nèi)容送到寄存器R0中。后變址尋址方式:基址不帶偏移作為傳送的地址,傳送后自動變址。例如:LDRR0,[R1],#4;R0
[R1]
;
R1
R1+4指令指定一個基址寄存器,再指定另一個寄存器(變址),其值作為位移加到基址上形成存儲器地址。例如:LDRR0,[R1,R2];R0
[R1+R2]這條指令將R1和R2的內(nèi)容相加得到操作數(shù)的地址,再將此地址單元的內(nèi)容送到R0。(基址)變址尋址基址變址尋址OPA操作數(shù)主存ALUBR將寄存器的值與偏移量相加作為操作數(shù)的物理地址多寄存器尋址多寄存器尋址是指一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。在多寄存器尋址方式中,一條指令可實現(xiàn)一組寄存器值的傳送。連續(xù)的寄存器間用“-”連接,否則用“,”分隔。例:
LDMIAR1,{R0,R2,R5};R0
[R1];R2
[R1+4];R5
[R1+8]該指令的后綴IA表示在每次執(zhí)行完加載/存儲操作后,R1按字長度增加,指令可將連續(xù)存儲單元的值送到R0,R2,R5寄存器中。堆棧尋址(1)
堆棧指針的移動方向稱之為“堆棧的生長方向”,ARM處理器可以支持2種,如圖所示。
■向上生長:在向堆棧寫入數(shù)據(jù)后,堆棧指針的值變大,也就是向高地址方向生長,稱之為遞增堆棧(AscendingStack);■向下生長:在向堆棧寫入數(shù)據(jù)后,堆棧指針的值變小,也就是向低地址方向生長,稱之為遞減堆棧(DescendingStack)。
堆棧是一種數(shù)據(jù)結(jié)構(gòu),是一種按特定順序進(jìn)行存取的存儲區(qū),操作順序分為“先進(jìn)后出”(FILO)和“后進(jìn)先出”(LIFO),使用一個稱為“堆棧指針”的專用寄存器指示當(dāng)前的操作位置,堆棧指針總是指向棧頂。堆棧的生長方向
堆棧尋址(2)
除了要考慮堆棧指針的增長方向之外,還要考慮堆棧指針指向的存儲單元是否已經(jīng)保存有堆棧數(shù)據(jù),或者說在入棧時是否可以直接向堆棧指針指向的存儲單元寫入數(shù)據(jù)。
ARM處理器支持2種情況,分別為“滿堆?!焙汀翱斩褩!?,如圖所示。■滿堆棧:堆棧指針指向最后壓入的有效數(shù)據(jù)項,稱為滿堆棧。這種堆棧的入棧操作要先調(diào)整指針再寫入數(shù)據(jù)。■空堆棧:堆棧指針指向下一個待壓入數(shù)據(jù)的空位置,稱為空堆棧。這種堆棧的入棧操作要先寫入數(shù)據(jù)再調(diào)整指針。堆棧尋址(3)
堆棧的滿空特性堆棧尋址(4)
綜合前面的堆棧生長方向和堆棧的滿空特性,可以得到4種堆棧類型,分別為:■滿遞增:堆棧通過增大存儲器的地址向上增長,堆棧指針指向內(nèi)含有有效數(shù)據(jù)項的最高地址。如指令LDMFA、STMFA等。■空遞增:堆棧通過增大存儲器的地址向上增長,堆棧指針指向堆棧上的第一個空位置。如指令LDMEA、STMEA等?!鰸M遞減:堆棧通過減小存儲器的地址向下增長,堆棧指針指向內(nèi)含有有效數(shù)據(jù)項的最低地址。如指令LDMFD、STMFD等?!隹者f減:堆棧通過減小存儲器的地址向下增長,堆棧指針指向堆棧下的第一個空位置。如指令LDMED、STMED等。堆棧尋址(5)
塊復(fù)制尋址塊復(fù)制尋址用于把一塊從存儲器的某一位置復(fù)制到另一位置,是一個多寄存器傳送指令。例如指令:LDMIAR0!,{R2-R9}STMIAR1,{R2-R9}這兩條指令是從R0指向的位置復(fù)制8個字到R1指向的位置。執(zhí)行指令后,R0由于“!”的引用自動尋址8個字,其值共增加32,而R1不變。相對尋址是變址尋址的一種變通,由程序計數(shù)器PC提供基地址。指令中的地址標(biāo)號作為位移量,兩者相加后得到操作數(shù)的有效地址。位移量指出的是操作數(shù)與現(xiàn)行指令之間的相對位置。例如指令:BLSUBR;轉(zhuǎn)移到SUBR…
;返回到SUBR…;子程序入口地址MOVPC,R14;返回相對尋址相對尋址與基址變址相似,區(qū)別是將PC作為基址寄存器操作數(shù)ALUOPA相對距離A1000PC……主存1000AOP課堂練習(xí)題1、指出下列指令中的尋址方式?ADDR0,R0,#0x3f;ADDR3,R1,[R2];LDRR0,[R1,#4];ANDR7,R6,#0xff;ADDR0,R1,R2;MOVPC,LR;MOVR0,R2,LSL,#3;LDMIAR0,{R1,R2,R3,R4};2、指出下列指令中尋址方式的意義?LDR為加載寄存器指令,即存儲數(shù)據(jù)。LDRR0,[R1,#4];LDRR0,[R1,#4]?。籐DRR0,[R1],#4;LDRR0,[R1,R2,LSL,#2];第4章ARM指令系統(tǒng)
132ARM指令集ARM指令格式ARM尋址方式數(shù)據(jù)處理指令(22種)跳轉(zhuǎn)指令(4種)Load/Store指令(16種)程序狀態(tài)寄存器指令(2種)協(xié)處理器指令(5種)軟件中斷指令(2種)ARM指令集6種類型(53種主要助記符):Load/Store指令(16種主要助記符)數(shù)據(jù)處理指令(22種主要助記符)跳轉(zhuǎn)指令(4種主要助記符)程序狀態(tài)寄存器指令(2種主要助記符)協(xié)處理器指令(5種主要助記符)軟件中斷指令
(2種主要助記符)Load/Store指令
Load/Store指令用于寄存器和內(nèi)存間數(shù)據(jù)的傳送。Load用于把內(nèi)存中的數(shù)據(jù)裝載到寄存器中。Store用于把寄存器中的數(shù)據(jù)存入內(nèi)存。該集合的指令使用頻繁,在指令集中最為重要,因為其他指令只能操作寄存器,當(dāng)數(shù)據(jù)存放在內(nèi)存中時,必須先把數(shù)據(jù)從內(nèi)存裝載到寄存器,執(zhí)行完后再把寄存器中的數(shù)據(jù)存儲到內(nèi)存中。Load/Store指令分為3類:(1)單一數(shù)據(jù)傳送指令(LDR和STR等)(2)多數(shù)據(jù)傳送指令(LDM和STM)(3)數(shù)據(jù)交換指令(SWP和SWPB)
Load/Store指令1-11.LDR字?jǐn)?shù)據(jù)加載指令格式:LDR{<cond>}<Rd>,<addr>;功能:把a(bǔ)ddr所表示的內(nèi)存地址中的字?jǐn)?shù)據(jù)裝載到目標(biāo)寄存器Rd中,同時還可以把合成的有效地址寫回到基址寄存器。地址addr可以是一個簡單的值、一個偏移量,或者是一個被移位的偏移量。尋址方式:Rn:基址寄存器。Rm:變址寄存器。Index:偏移量,12位的無符號數(shù)。LDR Rd,[Rn];把內(nèi)存中地址為Rn的字?jǐn)?shù)據(jù)裝入寄存器Rd中LDR Rd,[Rn,Rm]
;將內(nèi)存中地址為Rn+Rm的字?jǐn)?shù)據(jù)裝入寄存器Rd中Load/Store指令1-2LDR Rd,[Rn,#index]
;將內(nèi)存中地址為Rn+index的字?jǐn)?shù)據(jù)裝入Rd中LDR Rd,[Rn,Rm,LSL#5]
;將內(nèi)存中地址為Rn+Rm×32的字?jǐn)?shù)據(jù)裝入RdLDR Rd,[Rn,Rm]!
;將內(nèi)存中地址為Rn+Rm的字?jǐn)?shù)據(jù)裝入Rd,并將新地址Rn+Rm寫入RnLDR Rd,[Rn,#index]!
;將內(nèi)存中地址為Rn+index的字?jǐn)?shù)據(jù)裝入Rd,并將新地址Rn+index寫入RnLDR Rd,[Rn,Rm,LSL#5]!
;將內(nèi)存中地址為Rn+Rm×32的字?jǐn)?shù)據(jù)裝入Rd,并將新地址Rn+Rm×32寫入RnLoad/Store指令1-3LDR Rd,[Rn],Rm
;將內(nèi)存中地址為Rn的字?jǐn)?shù)據(jù)裝入寄存器Rd,并將新地址Rn+Rm寫入RnLDR Rd,[Rn],#index
;將內(nèi)存中地址為Rn的字?jǐn)?shù)據(jù)裝入寄存器Rd,并將新地址Rn+index寫入RnLDR Rd,[Rn],Rm,LSL#5
;將內(nèi)存中地址為Rn的字?jǐn)?shù)據(jù)裝入寄存器Rd,并將新地址Rn+Rm×32寫入Rn例如:LDR R0,[R1,R2,LSL#5]!;將內(nèi)存中地址為R1+R2×32的字?jǐn)?shù)據(jù)裝入寄存器R0,并將新地址R1+R2×32寫入R1Load/Store指令22.LDRB字節(jié)數(shù)據(jù)加載指令格式:LDR{<cond>}B<Rd>,<addr>;功能:同LDR指令,但該指令只是從內(nèi)存讀取一個8位的字節(jié)數(shù)據(jù)而不是一個32位的字?jǐn)?shù)據(jù),并將Rd的高24位清0。例如:LDRBR0,[R1];將內(nèi)存中起始地址為R1的一個字節(jié)數(shù)據(jù)裝入R0中Load/Store指令33.LDRBT用戶模式的字節(jié)數(shù)據(jù)加載指令格式:LDR{<cond>}BT<Rd>,<addr>;功能:同LDRB指令,但無論處理器處于何種模式,都將該指令當(dāng)作一般用戶模式下的內(nèi)存操作。Load/Store指令44.LDRH半字?jǐn)?shù)據(jù)加載指令格式:LDR{<cond>}H<Rd>,<addr>;功能:同LDR指令,但該指令只是從內(nèi)存讀取一個16位的半字?jǐn)?shù)據(jù)而不是一個32位的字?jǐn)?shù)據(jù),并將Rd的高16位清0。例如:LDRHR0,[R1];將內(nèi)存中起始地址為R1的一個半字?jǐn)?shù)據(jù)裝入R0中Load/Store指令55.LDRSB有符號的字節(jié)數(shù)據(jù)加載指令格式:LDR{<cond>}SB<Rd>,<addr>;功能:同LDRB指令,但該指令將寄存器Rd的高24位設(shè)置成所裝載的字節(jié)數(shù)據(jù)符號位的值。例如:LDRSBR0,[R1];將內(nèi)存中起始地址為R1的一個字節(jié)數(shù)據(jù)裝入R0中,R0的高24位設(shè)置成該字節(jié)數(shù)據(jù)的符號位Load/Store指令66.LDRSH有符號的半字?jǐn)?shù)據(jù)加載指令格式:LDR{<cond>}SH<Rd>,<addr>;功能:同LDRH指令,但該指令將寄存器Rd的高16位設(shè)置成所裝載的半字?jǐn)?shù)據(jù)符號位的值。例如:LDRSHR0,[R1];將內(nèi)存中起始地址為R1的一個16位半字?jǐn)?shù)據(jù)裝入R0中,R0的高16位設(shè)置成該半字?jǐn)?shù)據(jù)的符號位Load/Store指令77.LDRT用戶模式的字?jǐn)?shù)據(jù)加載指令格式:LDR{<cond>}T<Rd>,<addr>;功能:同LDR指令,但無論處理器處于何種模式,都將該指令當(dāng)作一般用戶模式下的內(nèi)存操作。addr所表示的有效地址必須是字對齊的,否則從內(nèi)存中讀出的數(shù)值需進(jìn)行循環(huán)右移操作。Load/Store指令88.STR字?jǐn)?shù)據(jù)存儲指令格式:STR{<cond>}<Rd>,<addr>;功能:把寄存器Rd中的字?jǐn)?shù)據(jù)(32位)保存到addr所表示的內(nèi)存地址中,同時還可以把合成的有效地址寫回到基址寄存器。地址addr可以是一個簡單的值、一個偏移量,或者是一個被移位的偏移量。尋址方式同LDR指令。例如:STRR0,[R1,#5]!;把R0中的字?jǐn)?shù)據(jù)保存到以R1+5為地址的內(nèi)存中,然后R1=R1+5Load/Store指令99.STRB字節(jié)數(shù)據(jù)存儲指令格式:STR{<cond>}B<Rd>,<addr>;功能:把寄存器Rd中的低8位字節(jié)數(shù)據(jù)保存到addr所表示的內(nèi)存地址中。其他用法同STR指令。例如:STRBR0,[R1];將寄存器R0中的低8位數(shù)據(jù)存入R1表示的內(nèi)存地址中Load/Store指令1010.STRBT用戶模式的字節(jié)數(shù)據(jù)存儲指令格式:STR{<cond>}BT<Rd>,<addr>;功能:同STRB指令,但無論處理器處于何種模式,該指令都將被當(dāng)作一般用戶模式下的內(nèi)存操作。Load/Store指令1111.STRH半字?jǐn)?shù)據(jù)存儲指令格式:STR{<cond>}H<Rd>,<addr>;功能:把寄存器Rd中的低16位半字?jǐn)?shù)據(jù)保存到addr所表示的內(nèi)存地址中,而且addr所表示的地址必須是半字對齊的。其他用法同STR指令。例如:STRHR0,[R1];將寄存器R0中的低16位數(shù)據(jù)存入R1表示的內(nèi)存地址中Load/Store指令1212.STRT用戶模式的字?jǐn)?shù)據(jù)存儲指令格式:STR{<cond>}T<Rd>,<addr>;功能:同STR指令,但無論處理器處于何種模式,該指令都將被當(dāng)作一般用戶模式下的內(nèi)存操作。Load/Store指令13-113.LDM批量數(shù)據(jù)加載指令格式:
LDM{<cond>}{<type>}<Rn>{!},<regs>{^};功能:從一片連續(xù)的內(nèi)存單元讀取數(shù)據(jù)到各個寄存器中,內(nèi)存單元的起始地址為基址寄存器Rn的值,各個寄存器由寄存器列表regs表示。該指令一般用于多個寄存器數(shù)據(jù)的出棧。type字段種類:IA:每次傳送后地址加1。IB:每次傳送前地址加1。DA:每次傳送后地址減1。DB:每次傳送前地址減1。FD:滿遞減堆棧。ED:空遞減堆棧。FA:滿遞增堆棧。EA:空遞增堆棧。Load/Store指令13-2例如
LDMIA/IB/DA/DBR13!,{R0-R1,R3};各指令執(zhí)行完后,結(jié)果如圖所示。IBDADBLoad/Store指令13-3FD、ED、FA和EA指定是滿棧還是空棧,是升序棧還是降序棧,用于堆棧尋址。一個滿棧的棧指針指向上次寫的最后一個數(shù)據(jù)單元.空棧的棧指針指向第一個空閑單元。一個降序棧是在內(nèi)存中反向增長而升序棧在內(nèi)存中正向增長。Load/Store指令13-4格式:LDM{<cond>}{<type>}<Rn>{!},<regs>{^};{!}:若選用了此后綴,則當(dāng)指令執(zhí)行完畢后,將最后的地址寫入基址寄存器。{^}:該后綴用于指示指令所用的寄存器為用戶模式下的寄存器。Load/Store指令14-114.STM批量數(shù)據(jù)存儲指令格式:STM{<cond>}{<type>}<Rn>{!},<regs>{^};功能:將各個寄存器的值存入一片連續(xù)的內(nèi)存單元中,內(nèi)存單元的起始地址為基址寄存器Rn的值,各個寄存器由寄存器列表regs表示。該指令一般用于多個寄存器數(shù)據(jù)的入棧。{^}:指示指令所用的寄存器為用戶模式下的寄存器。其他參數(shù)用法同LDM指令。例如:STMEAR13!,{R0-R12,PC};將寄存器R0~R12以及程序計數(shù)器PC的值保存到R13指示的堆棧中Load/Store指令1515.SWP字?jǐn)?shù)據(jù)交換指令格式:SWP{<cond>}<Rd>,<op1>,[<op2>];功能:
Rd=[op2],[op2]=op1從op2所表示的內(nèi)存裝載一個字并把這個字放置到目的寄存器Rd中,然后把寄存器op1的內(nèi)容存儲到同一內(nèi)存地址中。op1,op2均為寄存器。例如:SWPR0,R1,[R2];將R2所表示的內(nèi)存單元中的字?jǐn)?shù)據(jù)裝載到R0,然后將R1中的字?jǐn)?shù)據(jù)保存到R2所表示的內(nèi)存單元中Load/Store指令1616.SWPB字節(jié)數(shù)據(jù)交換指令格式:SWP{<cond>}B<Rd>,<op1>,[<op2>];功能:從op2所表示的內(nèi)存裝載一個字節(jié)并把這個字節(jié)放置到目的寄存器Rd的低8位中,Rd的高24位設(shè)置為0;然后將寄存器op1的低8位數(shù)據(jù)存儲到同一內(nèi)存地址中。例如:SWPBR0,R1,[R2];將R2所表示的內(nèi)存單元中的一個字節(jié)數(shù)據(jù)裝載到R0的低8位,然后將R1中的低8位字節(jié)數(shù)據(jù)保存到R2所表示的內(nèi)存單元中數(shù)據(jù)處理指令11.MOV數(shù)據(jù)傳送指令格式:MOV{<cond>}{S}<Rd>,<op1>;功能:Rd=op1op1可以是寄存器、被移位的寄存器或立即數(shù)。例如:MOVR0,#5 ;R0=5MOVR0,R1 ;R0=R1MOVR0,R1,LSL#5 ;R0=R1左移5位數(shù)據(jù)處理指令22.MVN數(shù)據(jù)取反傳送指令格式:MVN{<cond>}{S}<Rd>,<op1>;功能:將op1表示的值傳送到目的寄存器Rd中,但該值在傳送前被按位取反,即Rd=!op1;op1可以是寄存器、被移位的寄存器或立即數(shù)。例如:MVNR0,#0 ;R0=-1數(shù)據(jù)處理指令33.ADD加法指令格式:ADD{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn+op2op2可以是寄存器,被移位的寄存器或立即數(shù)。例如:ADDR0,R1,#5 ;R0=R1+5ADDR0,R1,R2 ;R0=R1+R2ADDR0,R1,R2,LSL#5 ;R0=R1+R2左移5位數(shù)據(jù)處理指令44.ADC帶進(jìn)位加法指令格式:ADC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即數(shù);carry為進(jìn)位標(biāo)志值。該指令用于實現(xiàn)超過32位的數(shù)的加法。例如:第一個64位操作數(shù)存放在寄存器R2,R3中;第二個64位操作數(shù)存放在寄存器R4,R5中;64位結(jié)果存放在R0,R1中。64位的加法可由以下語句實現(xiàn):ADDSR0,R2,R4 ;低32位相加,S表示結(jié)果影響條件標(biāo)志位的值A(chǔ)DCR1,R3,R5 ;高32位相加數(shù)據(jù)處理指令55.SUB減法指令格式:SUB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2op2可以是寄存器、被移位的寄存器或立即數(shù)。例如:SUBR0,R1,#5 ;R0=R1-5SUBR0,R1,R2 ;R0=R1-R2SUBR0,R1,R2,LSL#5 ;R0=R1-R2左移5位數(shù)據(jù)處理指令66.RSB反向減法指令格式:RSB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SUB指令,但倒換了兩操作數(shù)的前后位置,即Rd=op2-Rn。例如:RSBR0,R1,#5 ;R0=5-R1RSBR0,R1,R2 ;R0=R2-R1RSBR0,R1,R2,LSL#5 ;R0=R2左移5位-R1數(shù)據(jù)處理指令77.SBC帶借位減法指令格式:SBC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2-!carryop2可以是寄存器、被移位的寄存器或立即數(shù)。SUB和SBC生成進(jìn)位標(biāo)志的方式不同于常規(guī),如果需要借位則清除進(jìn)位標(biāo)志,所以指令要對進(jìn)位標(biāo)志進(jìn)行一個非操作。例如:第一個64位操作數(shù)存放在寄存器R2,R3中;第二個64位操作數(shù)存放在寄存器R4,R5中;64位結(jié)果存放在R0,R1中。64位的減法(第一個操作數(shù)減去第二個操作數(shù))可由以下語句實現(xiàn):SUBSR0,R2,R4; 低32位相減,S表示結(jié)果影響條件標(biāo)志位的值SBCR1,R3,R5; 高32位相減數(shù)據(jù)處理指令88.RSC帶借位的反向減法指令格式:RSC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SBC指令,但倒換了兩操作數(shù)的前后位置,即Rd=op2-Rn-!carry。例如:前提條件與SBC例子相同,操作數(shù)1-操作數(shù)2的實現(xiàn)語句需改為:SUBSR0,R2,R4; 低32位相減,S表示結(jié)果影響寄存器CPSR的值RSCR1,R5,R3; 高32位相減數(shù)據(jù)處理指令99.MUL32位乘法指令格式:MUL{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn×op2該指令根據(jù)S標(biāo)志,決定操作是否影響CPSR的值;其中op2必須為寄存器。Rn和op2的值為32位的有符號數(shù)或無符號數(shù)。例如:MULSR0,R1,R2 ;R0=R1×R2,結(jié)果影響寄存器CPSR的值數(shù)據(jù)處理指令1010.MLA32位乘加指令格式:MLA{<cond>}{S}<Rd>,<Rn>,<op2>,<op3>;功能:Rd=Rn×op2+op3op2和op3必須為寄存器。Rn、op2和op3的值為32位的有符號數(shù)或無符號數(shù)。例如:MLAR0,R1,R2,R3 ;R0=R1×R2+R3數(shù)據(jù)處理指令1111.SMULL64位有符號數(shù)乘法指令格式:
SMULL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:RdhRdl=Rn×op2Rdh、Rdl和op2均為寄存器。Rn和op2的值為32位的有符號數(shù)。例如:SMULLR0,R1,R2,R3;R0=R2×R3的低32位;R1=R2×R3的高32位數(shù)據(jù)處理指令1212.SMLAL64位有符號數(shù)乘加指令格式:
SMLAL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:RdhRdl=Rn×op2+RdhRdlRdh、Rdl和op2均為寄存器。Rn和op2的值為32位的有符號數(shù),RdhRdl的值為64位的加數(shù)。例如:SMLALR0,R1,R2,R3;R0=R2×R3的低32位+R0;R1=R2×R3的高32位+R1數(shù)據(jù)處理指令1313.UMULL64位無符號數(shù)乘法指令格式:
UMULL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:同SMULL指令,但指令中Rn和op2的值為32位的無符號數(shù)。例如:UMULLR0,R1,R2,R3;R0=R2×R3的低32位;R1=R2×R3的高32位其中R2,R3的值為無符號數(shù)數(shù)據(jù)處理指令1414.UMLAL64位無符號數(shù)乘加指令格式:
UMLAL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:同SMLAL指令,但指令中Rn,op2的值為32位的無符號數(shù),RdhRdl的值為64位無符號數(shù)。例如:UMLALR0,R1,R2,R3;R0=R2×R3的低32位+R0;R1=R2×R3的高32位+R1其中R2,R3的值為32位無符號數(shù)R1,R0的值為64位無符號數(shù)數(shù)據(jù)處理指令1515.AND邏輯與指令格式:AND{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=RnANDop2op2可以是寄存器,被移位的寄存器或立即數(shù)。一般用于清除Rn的特定幾位。例如:ANDR0,R0,#5;保持R0的第0位和第2位,其余位清0數(shù)據(jù)處理指令1616.ORR邏輯或指令格式:ORR{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=RnORop2op2可以是寄存器、被移位的寄存器或立即數(shù)。一般用于設(shè)置Rn的特定幾位。例如:ORRR0,R0,#5;R0的第0位和第2位設(shè)置為1,其余位不變數(shù)據(jù)處理指令1717.EOR邏輯異或指令格式:EOR{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=RnEORop2op2可以是寄存器、被移位的寄存器或立即數(shù)。一般用于將Rn的特定幾位取反。例如:EORR0,R0,#5;R0的第0位和第2位取反,其余位不變數(shù)據(jù)處理指令1818.BIC位清除指令格式:BIC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=RnAND(!op2)用于清除寄存器Rn中的某些位,并把結(jié)果存放到目的寄存器Rd中.操作數(shù)op2是一個32位掩碼(mask),如果在掩碼中設(shè)置了某一位,則清除Rn中的這一位;未設(shè)置的掩碼位指示Rn中此位保持不變。其中,op2可以是寄存器、被移位的寄存器或立即數(shù)。例如:BICR0,R0,#5;R0中第0位和第2位清0,其余位不變數(shù)據(jù)處理指令1919.CMP比較指令格式:CMP{<cond>}<Rn>,<op1>;功能:Rn-op1該指令進(jìn)行一次減法運算,但不存儲結(jié)果,根據(jù)結(jié)果更新CPSR中條件標(biāo)志位的值。該指令不需要顯式地指定S后綴來更改狀態(tài)標(biāo)志。其中,操作數(shù)op1為寄存器或立即數(shù)。例如:CMPR0,#5 ;計算R0-5,根據(jù)結(jié)果設(shè)置條件標(biāo)志位ADDGTR0,R0,#5;如果R0>5,則執(zhí)行ADDGT指令數(shù)據(jù)處理指令2020.CMN反值比較指令格式:CMN{<cond>}<Rn>,<op1>;功能:同CMP指令,但寄存器Rn的值是和op1取負(fù)的值進(jìn)行比較。例如:CMNR0,#5 ;把R0與-5進(jìn)行比較數(shù)據(jù)處理指令2121.TST位測試指令格式:TST{<cond>}<Rn>,<op1>;功能:
RnANDop1根據(jù)結(jié)果更新CPSR中條件標(biāo)志位的值,但不存儲結(jié)果。用于檢查寄存器Rn是否設(shè)置了op1中相應(yīng)的位。例如:TSTR0,#5 ;測試R0中第0位和第2位是否為1數(shù)據(jù)處理指令2222.TEQ相等測試指令格式:TEQ{<cond>}<Rn>,<op1>;功能:
RnEORop1將寄存器Rn的值和操作數(shù)op1所表示的值按位作邏輯異或操作,根據(jù)結(jié)果更新CPSR中條件標(biāo)志位的值,但不存儲結(jié)果。用于檢查寄存器Rn的值是否和op1所表示的值相等。例如:TEQR0,#5 ;判斷R0的值是否和5相等跳轉(zhuǎn)指令
跳轉(zhuǎn)指令用于實現(xiàn)程序的跳轉(zhuǎn)和程序狀態(tài)的切換。ARM程序設(shè)計中,實現(xiàn)程序跳轉(zhuǎn)有兩種方式:(1)跳轉(zhuǎn)指令,(2)直接向程序寄存器PC(R15)中寫入目標(biāo)地址值。通過向程序計數(shù)器PC寫入跳轉(zhuǎn)地址值,可以實現(xiàn)在4GB的地址空間中的任意跳轉(zhuǎn)。使用跳轉(zhuǎn)指令,其跳轉(zhuǎn)空間受到限制。
跳轉(zhuǎn)指令11.B跳轉(zhuǎn)指令格式:B{<cond>}<addr>;功能:
PC=PC+addr左移兩位addr的值是相對當(dāng)前PC(即寄存器R15)的值的一個偏移量,而不是一個絕對地址,它是24位有符號數(shù)。實際地址的值由匯編器來計算.addr的值有符號擴(kuò)展為32位后,左移兩位,然后與PC值相加,即得到跳轉(zhuǎn)的目的地址。跳轉(zhuǎn)的范圍為-32MB~+32MB。例如:Bexit; 程序跳轉(zhuǎn)到標(biāo)號exit處…exit…跳轉(zhuǎn)指令22.BL帶返回的跳轉(zhuǎn)指令格式:BL{<cond>}<addr>;功能:同B指令,但BL指令執(zhí)行跳轉(zhuǎn)操作的同時,還將PC(寄存器R15)的值保存到LR寄存器(寄存器R14)中。該指令用于實現(xiàn)子程序調(diào)用,程序的返回可通過把LR寄存器的值復(fù)制到PC寄存器中來實現(xiàn)。例如:BLfunc; 調(diào)用子程序func…func…MOVR15,R14; 子程序返回跳轉(zhuǎn)指令33.BLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令格式:BLX<addr>;或BLX<Rn>;功能:處理器跳轉(zhuǎn)到目標(biāo)地址處,并將PC(寄存器R15)的值保存到LR寄存器(R14)中。如果目標(biāo)地址處為Thumb指令,則程序狀態(tài)從ARM狀態(tài)切換為Thumb狀態(tài)。該指令用于子程序調(diào)用和程序狀態(tài)的切換。例如:BLXT16; 跳轉(zhuǎn)到標(biāo)號T16處執(zhí)行,T16后面的指令為Thumb指令…CODE16T16 后面指令為Thumb指令…跳轉(zhuǎn)指令44.BX帶狀態(tài)切換的跳轉(zhuǎn)指令格式:BX<Rn>;功能:處理器跳轉(zhuǎn)到目標(biāo)地址處,從那里繼續(xù)執(zhí)行;目標(biāo)地址為寄存器Rn的值和0xFFFFFFFE作與操作的結(jié)果。目標(biāo)地址處的指令可以是ARM指令,也可以是Thumb指令。例如:ADRR0,exit ;標(biāo)號exit處的地址裝入R0中BXR0 ;跳轉(zhuǎn)到exit處程序狀態(tài)寄存器指令
用于狀態(tài)寄存器和通用寄存器間傳送數(shù)據(jù)??偣灿袃蓷l指令:MRS和MSR。兩者結(jié)合可用來修改程序狀態(tài)寄存器的值。
程序狀態(tài)寄存器指令1
1.MRS程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令格式:MRS{<cond>}<Rd>,CPSR/SPSR;功能:用于將程序狀態(tài)寄存器的內(nèi)容傳送到目標(biāo)寄存器Rd中。當(dāng)進(jìn)入中斷服務(wù)程序或進(jìn)程切換時,該指令可用來保存當(dāng)前狀態(tài)寄存器的值。例如:MRSR0,CPSR;狀態(tài)寄存器CPSR的值存入寄存器R0中程序狀態(tài)寄存器指令2
2.MSR通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令格式:MSR{<cond>}CPSR/SPSR_<field>,<op1>;功能:用于將寄存器Rd的值傳送到程序狀態(tài)寄存器中。當(dāng)退出中斷服務(wù)程序或進(jìn)程切換時,該指令可用來恢復(fù)狀態(tài)寄存器的值。操作數(shù)op1可以是通用寄存器或立即數(shù)。<field>:用來設(shè)置狀態(tài)寄存器中需要操作的位。32位的狀態(tài)寄存器可以分為4個域:位[31:24]為條件標(biāo)志位域,用f表示。位[23:16]為狀態(tài)位域,用s表示。位[15:8]為擴(kuò)展位域,用x表示。位[7:0]為控制位域,用c表示。例如:MSRCPSR_f,R0;用R0的值修改CPSR的條件標(biāo)志域MSRCPSR_fsxc,#5; CPSR的值修改為5協(xié)處理器指令
協(xié)處理器(coprocessor):一種芯片,用于減輕系統(tǒng)微處理器的特定處理任務(wù)。例如,數(shù)學(xué)協(xié)處理器可以控制數(shù)字處理;圖形協(xié)處理器可以處理視頻繪制。協(xié)處理器可以附屬于ARM處理器。一個協(xié)處理器通過擴(kuò)展指令集或提供配置寄存器來擴(kuò)展內(nèi)核處理功能。一個或多個協(xié)處理器可以通過協(xié)處理器接口與ARM內(nèi)核相連。ARM處理器最多可支持16個協(xié)處理器,用于輔助ARM完成各種協(xié)處理操作。協(xié)處理器指令
在程序執(zhí)行過程中,各協(xié)處理器只執(zhí)行自身的協(xié)處理指令,而忽略屬于ARM處理器和其他協(xié)處理器的指令。ARM協(xié)處理器指令可分為3類:(1)ARM處理器用于初始化協(xié)處理器的數(shù)據(jù)操作指令(CDP)。(2)協(xié)處理器寄存器和內(nèi)存單元之間的數(shù)據(jù)傳送指令(LDC,STC)。(3)ARM處理器寄存器和協(xié)處理器寄存器之間的數(shù)據(jù)傳送指令(MCR,MRC)。
異常中斷指令1
1.SWI軟件中斷指令格式:SWI{<cond>}24位的立即數(shù);功能:用于產(chǎn)生軟件中斷,以使用戶程序調(diào)用操作系統(tǒng)的系統(tǒng)例程。指令中24位的立即數(shù)指定用戶程序調(diào)用系統(tǒng)例程的類型,其參數(shù)通過通用寄存器傳遞。當(dāng)24位的立即數(shù)被忽略時,系統(tǒng)例程類型由寄存器R0指定,其參數(shù)通過其他通用寄存器傳遞。例如:SWI0X05;調(diào)用編號為05的系統(tǒng)例程。異常中斷指令2
SWI{<cond>}<immed_24>指令操作的偽代碼:ifConditionPassed(cond)thenR14_svc=adderssofnextinstructionaftertheSWIinstructionSPSR_svc=CPSRCPSR[4:0]=0b10011/*EnterSupervisormode*/CPSR[5]=0/*ExecuteinARMstate,TBit=0*//*CPSR[6]isunchanged,fiq不變*/CPSR[7]=1/*Disablenormalinterrupt,IBit=1,禁止irq*/ifhighvectorsconfiguredthenPC=0xFFFF0008elsePC=0x00000008異常中斷指令3
2.BKPT斷點中斷指令格式:BKPT16位的立即數(shù);功能:用于產(chǎn)生軟件斷點中斷,以便軟件調(diào)試時使用。16位的立即數(shù)用于保存軟件調(diào)試中額外的斷點信息。指令操作的偽代碼:if(notoverdidenbydebughardware)thenR14_abt=adderssofBKPTinstruction+4SPSR_abt=CPSRCPSR[4:0]=0b10111/*中止模式*/CPSR[5]=0/*使程序處于ARM狀態(tài),TBit=0*//*CPSR[6]isunchanged,fiq不變*/CPSR[7]=1/*禁止正常中斷,IBit=1,禁止irq*/ifhighvectorsconfiguredthenPC=0xFFFF000CelsePC=0x0000000C
ARM偽指令(1)
ARM偽指令不是ARM指令集中的指令,只是為了編程方便,編譯器定義了偽指令,使用時可以像其他ARM指令一樣使用,但在編譯時這些指令將被等效的ARM指令代替。ARM常用的偽指令有4條,分別為ADR偽指令、ADRL偽指令、LDR偽指令、NOP偽指令。
(1)ADR—小范圍的地址讀取偽指令
:
指令格式:
ADR{cond}register,expr
其中:register為加載的目標(biāo)寄存器。
expr為地址表達(dá)式。當(dāng)?shù)刂分凳欠亲謱R時,取值范圍為-255~255字節(jié);當(dāng)?shù)刂分凳亲謱R時,取值范圍為-1020~1020字節(jié)。對于基于PC相對偏移的地址值時,給定范圍是相對當(dāng)前指令地址后兩個字處(因為ARM9TDMI
的流水線特性)。
指令功能:ADR指令將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中。在匯編編譯源程序時,ADR偽指令被編譯器替換成一條合適的指令。通常,編譯器用一條ADD指令或SUB指令來實現(xiàn)該ADR偽指令的功能,若不能用一條指令實現(xiàn),則產(chǎn)生錯誤。應(yīng)用示例:可以用ADR加載地址,實現(xiàn)查表,如程序清單3.14所示。ARM偽指令(2)程序清單3.14小范圍地址的加載ARM偽指令(3)(2)ADRL—中等范圍的地址讀取偽指令:
指令格式:
ADRL{cond}register,expr
其中:register為加載的目標(biāo)寄存器。
expr為地址表達(dá)式。當(dāng)?shù)刂分凳欠亲謱R時,取值范圍為-64~64KB;當(dāng)?shù)刂分凳亲謱R時,取值范圍為-256~256KB。對于基于PC相對偏移的地址值時,給定范圍是相對當(dāng)前指令地址后兩個字處(因為ARM9TDMI的流水線特性)。
ARM偽指令(4)
指令功能:ADRL指令將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中,比ADRL偽指令讀取更大的地址范圍。在匯編編譯源程序時,ADRL偽指令被編譯器替換成兩條合適的指令。若不能用兩條指令實現(xiàn)ADRL偽指令功能,則產(chǎn)生錯誤,編譯失敗。
應(yīng)用示例:ARM偽指令(5)可以用ADRL加載地址,實現(xiàn)程序跳轉(zhuǎn),如程序清單3.15所示。程序清單3.15中等范圍地址的加載ARM偽指令(6)(3)LDR—大范圍的地址讀取偽指令:
指令格式:
LDR{cond}register,=expr/label-expr
其中:register為加載的目標(biāo)寄存器。
expr為32位立即數(shù)。
label-expr是基于PC的地址表達(dá)式或外部表達(dá)式。
指令功能:LDR偽指令用于加載32位的立即數(shù)或一個地址值到指定寄存器。在匯編編譯源程序時,LDR偽指令被編譯器替換成一條合適的指令。若加載的常數(shù)未超過MOV或MVN的范圍,則使用MOV或MVN指令代替該LDR偽指令,否則匯編器將常量放入文字池,并使用一條程序相對偏移的LDR加載指令從文字池讀出常量。
ARM偽指令(7)應(yīng)用示例:偽指令LDR常用于加載芯片外圍功能部件的寄存器(32位立即數(shù)),以實現(xiàn)各種控制操作,如程序清單3.16所示。ARM偽指令(8)程序清單3.16加載32位立即數(shù)從PC到文字池的偏移量必須小于4KB。與ARM指令的LDR相比,偽指令的LDR的參數(shù)有“=”號。說明:若沒有使用LTORG聲明文字池,則匯編器會在程序末尾自動聲明。ARM偽指令(9)(4)NOP—空操作偽
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服務(wù)升級客戶合同(2篇)
- 2025至2031年中國軟瓣止回閥行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國燃?xì)鉄煨袠I(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國雙拋物線格柵燈行業(yè)投資前景及策略咨詢研究報告
- 2025年度旅游行業(yè)高級管理人才引進(jìn)合同
- 2025年度稅務(wù)局查賬財務(wù)清算合同
- 2025年度智能新能源汽車合作協(xié)議轉(zhuǎn)讓股份合同模板
- 二零二五年度合同主體變更補(bǔ)充協(xié)議的履行與變更
- 二零二五年度茶樓轉(zhuǎn)讓及茶藝養(yǎng)生館合作合同范本:茶樓與茶藝養(yǎng)生館合作轉(zhuǎn)讓協(xié)議
- 二零二五年度行政事業(yè)單位國有房屋租賃合同(安全風(fēng)險評估)
- 2025年度高端商務(wù)車輛聘用司機(jī)勞動合同模板(專業(yè)版)4篇
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2025長江航道工程局招聘101人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年黑龍江哈爾濱市面向社會招聘社區(qū)工作者1598人歷年高頻重點提升(共500題)附帶答案詳解
- 《妊娠期惡心嘔吐及妊娠劇吐管理指南(2024年)》解讀
- 【獨家揭秘】2024年企業(yè)微信年費全解析:9大行業(yè)收費標(biāo)準(zhǔn)一覽
- 1-1 擁抱夢想:就這樣埋下一顆種子【2022中考作文最熱8主題押題24道 構(gòu)思點撥+范文點評】
- 職業(yè)暴露與防護(hù)
- 酒店行業(yè)客源渠道分析
- AVL-CRUISE-2019-整車經(jīng)濟(jì)性動力性分析操作指導(dǎo)書
- 腸道醫(yī)學(xué)解剖和生理學(xué)
評論
0/150
提交評論