ARM組合語(yǔ)言程式設(shè)計(jì)_第1頁(yè)
ARM組合語(yǔ)言程式設(shè)計(jì)_第2頁(yè)
ARM組合語(yǔ)言程式設(shè)計(jì)_第3頁(yè)
ARM組合語(yǔ)言程式設(shè)計(jì)_第4頁(yè)
ARM組合語(yǔ)言程式設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩98頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ARM組合語(yǔ)言程式設(shè)計(jì)1ARM微處理器指令優(yōu)點(diǎn)小晶片的面積低功耗ARM架構(gòu)還採(cǎi)用了一些特別的技術(shù),在性能的前提下儘量縮小晶片的面積,並降低功耗。條件式指令所有的指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行,從而提高指令的執(zhí)行效率。連續(xù)存取資料可用載入/存儲(chǔ)指令連續(xù)傳輸資料,以提高資料的傳輸效率。同時(shí)完成邏輯處理和移位元可在一條資料處理指令中同時(shí)完成邏輯處理和移位處理。自動(dòng)增減迴圈在迴圈處理中使用位址的自動(dòng)增減來(lái)提高執(zhí)行效率。2ARM微處理器的指令A(yù)RM兩種指令集ARM指令為32位元的長(zhǎng)度,Thumb指令為16位元長(zhǎng)度。Thumb指令集為ARM指令集的功能子集,但與等價(jià)的ARM程式碼相比較,可節(jié)省30%~40%以上的存儲(chǔ)空間。3ARM處理器模式ARM架構(gòu)支援7種處理器模式。模式改變?cè)谲涹w控制下可以改變模式外部中斷或例外處理也可以引起模式發(fā)生改變。大多數(shù)應(yīng)用程式在使用者模式下執(zhí)行。當(dāng)處理器工作在使用者模式時(shí),正在執(zhí)行的程式不能存取某些被保護(hù)的系統(tǒng)資源,也不能改變模式,除非例外(exception)發(fā)生。4ARM支援的7種工作模式處理器模式說(shuō)明User(usr)正常程式執(zhí)行模式FIQ(fiq)支援高速資料般移或通道處理IRQ(irq)用於通用中斷處理Supervisor(svc)作業(yè)系統(tǒng)保護(hù)模式Abortmode(abt)實(shí)現(xiàn)虛擬記憶體和/或記憶體保護(hù)Undefined(und)支援硬體輔助運(yùn)算器的軟體仿真System(sys)執(zhí)行特權(quán)作業(yè)系統(tǒng)工作5ARM微處理器的暫存器結(jié)構(gòu)ARM處理器共有37個(gè)暫存器,被分為若干個(gè)組(BANK),這些暫存器包括:31個(gè)通用暫存器。包括程式計(jì)數(shù)器(PC指標(biāo))。6個(gè)程式狀態(tài)暫存器用以標(biāo)識(shí)CPU的工作狀態(tài)及程式的執(zhí)行狀態(tài),均為32位元,目前只使用了其中的一部分。ARM處理器有7種不同的處理器模式在每一種處理器模式下均有一組相應(yīng)的暫存器與之對(duì)應(yīng)。6ARM暫存器1)不分組暫存器R0~R7R0~R7是不分組暫存器。這意味著在所有處理器模式下,它們每一個(gè)都存取一樣的32位元暫存器。它們是真正的通用暫存器,沒(méi)有架構(gòu)所隱含的特殊用途。2)分組暫存器R8~R14R8~R14是分組暫存器。它們每一個(gè)存取的實(shí)體暫存器取決於當(dāng)前的處理器模式。若要存取特定的實(shí)體暫存器而不依賴當(dāng)前的處理器模式,則要使用規(guī)定的各字。暫存器R8~R12各有兩組實(shí)體暫存器:一組為FIQ模式,另一組為除了FIQ以外的所有模式。暫存器R8~R12沒(méi)有任何指定的特殊用途。只是使用R8~R14來(lái)簡(jiǎn)單地處理中斷。暫存器R13,R14各有6個(gè)分組的實(shí)體暫存器。1個(gè)用於使用者模式和系統(tǒng)模式,其他5個(gè)分別用於5種例外模式。暫存器R13通常用做堆疊指標(biāo),稱為SP(StackPointer),每種例外模式都有自己的R13。暫存器R14用作副程式鏈結(jié)暫存器,也稱為L(zhǎng)R(。3)程式計(jì)數(shù)器R15暫存器R15用做程式計(jì)數(shù)器(PC)。7ARM暫存器8程式狀態(tài)暫存器(ProgramStatusRegister)有一個(gè)CurrentProgramStatusRegister(CPSR)在所有處理器模式下都可以存取當(dāng)前的程式狀態(tài)暫存器CPSR。CPSR包含條件碼旗標(biāo),中斷禁止位元,當(dāng)前處理器模式以及其他狀態(tài)和控制資訊。有五個(gè)SavedProgramStatusRegisters(SPSRs)每種例外模式都有一個(gè)程式狀態(tài)保存暫存器SPSR。SPSR用於保留CPSR的狀態(tài)。9程式狀態(tài)暫存器條件碼旗標(biāo):N,Z,C,V大多數(shù)指令可以測(cè)試這些條件碼旗標(biāo)以決定程式指令如何執(zhí)行控制位元:最低8位元I,F(xiàn),T和M位元用做控制位元。當(dāng)例外出現(xiàn)時(shí)改變控制位元。當(dāng)處理器在特權(quán)模式下也可以由軟體改變。中斷禁止位元:I置1則禁止IRQ中斷。F置1則禁止FIQ中斷。T位元:T=0指示ARM執(zhí)行。T=1指示Thumb執(zhí)行。在這些架構(gòu)系統(tǒng)中,可自由地使用能在ARM和Thumb狀態(tài)之間切換的指令。模式位元:M0,M1,M2,M3和M4(M[4:0])是模式位元.這些位元決定處理器的工作模式。10PSRMode位位元元與與可可使使用用暫暫存存器器11ARM和和Thumb之之間間狀狀態(tài)態(tài)的的切切換換ARM處處理理器器可可在在兩兩種種工工作作狀狀態(tài)態(tài)之之間間切切換換。。在Thumb狀狀態(tài)態(tài)下下,,程程式式計(jì)計(jì)數(shù)數(shù)器器PC使使用用位位元元1選選擇擇另另一一個(gè)個(gè)半半字字。。ARM和和Thumb之之間間狀狀態(tài)態(tài)的的切切換換不不影影響響處處理理器器的的模模式式或或暫暫存存器器的的內(nèi)內(nèi)容容。。進(jìn)入入Thumb狀狀態(tài)態(tài)。。當(dāng)當(dāng)運(yùn)運(yùn)算算元元暫暫存存器器的的狀狀態(tài)態(tài)位位元元0為為1時(shí)時(shí),,執(zhí)執(zhí)行行BX指指令令進(jìn)進(jìn)入入Thumb狀狀態(tài)態(tài)。。如果果處處理理器器在在Thumb狀狀態(tài)態(tài)進(jìn)進(jìn)入入例例外外,,則則當(dāng)當(dāng)例例外外處處理理((IRQ,,F(xiàn)IQ,,Undef,,Abort和和SWI))返返回回時(shí)時(shí),,自自動(dòng)動(dòng)切切換換到到Thumb狀狀態(tài)態(tài)。。當(dāng)運(yùn)運(yùn)算算元元暫暫存存器器的的狀狀態(tài)態(tài)位位元元0為為0時(shí)時(shí),,執(zhí)執(zhí)行行BX指指令令進(jìn)進(jìn)入入ARM狀狀態(tài)態(tài)。。處理理器器進(jìn)進(jìn)行行例例外外處處理理(IRQ,,F(xiàn)IQ,,Undef,,Abort和和SWI),,從從例例外外向向量量位位址址開(kāi)開(kāi)始始執(zhí)執(zhí)行行也也可可以以進(jìn)進(jìn)入入ARM狀狀態(tài)態(tài)。。12Thumb指令令及應(yīng)用用Thumb指令令集是ARM指指令集的的一個(gè)子子集,允允許指令令編碼為為16位位元的長(zhǎng)長(zhǎng)度。Thumb指令令集在保保留32程式碼碼優(yōu)勢(shì)的的同時(shí),,大大的的節(jié)省了了系統(tǒng)的的存儲(chǔ)空空間。大多數(shù)的的Thumb指指令是無(wú)無(wú)條件執(zhí)執(zhí)行的。。大多數(shù)的的Thumb資資料處理理指令的的目的暫暫存器與與其中一一個(gè)來(lái)原原暫存器器相同。。Thumb指令令與ARM指令令的時(shí)間間效率和和空間效效率關(guān)係係為:Thumb程式式碼所需需的存儲(chǔ)儲(chǔ)空間約約為ARM程式式碼的60%~~70%%Thumb程式式碼使用用的指令令數(shù)比ARM程程式碼多多約30%~40%若使用32位的的記憶體體,ARM程式式碼比Thumb程式式碼快約約40%%若使用16位的的記憶體體,Thumb程式碼碼比ARM程式式碼快約約40%%~50%與ARM程式碼碼相比較較,使用用Thumb程程式碼,,記憶體體的功耗耗會(huì)降低低約30%若對(duì)系統(tǒng)統(tǒng)的性能能有較高高要求,,應(yīng)使用用32位位元的存存儲(chǔ)系統(tǒng)統(tǒng)和ARM指令令集。若對(duì)系統(tǒng)統(tǒng)的成本本及功耗耗有較高高要求,,則應(yīng)使使用16位元的的存儲(chǔ)系系統(tǒng)和Thumb指令令集。13Thumb與ARM和和暫存器器的比較較14Thumb狀態(tài)態(tài)的暫存存器集Thumb狀態(tài)態(tài)下的暫暫存器集集是ARM狀態(tài)態(tài)下暫存存器集的的子集。。程式師師可以直直接存取取8個(gè)通通用的暫暫存器(R0~R7),PC,SP,LR和CPSP。。每一種種特權(quán)模模式都有有一組SP,LR和SPSR。Thumb狀狀態(tài)的R0~R7與ARM狀態(tài)的R0~R7是是一致的。Thumb狀狀態(tài)的CPSR和SPSR與ARM狀態(tài)的CPSR和SPSR是一致致的。Thumb狀狀態(tài)的SP映映射到ARM狀態(tài)的R13。Thumb狀態(tài)的LR映射到到ARM狀狀態(tài)的R14。Thumb狀態(tài)的PC映射到到ARM狀狀態(tài)的PC(R15)。15Thumb暫存器16ARM記憶憶體格式BIG-ENDIANLITTLE-ENDIAN17ARM指指令格式(InstructionFormat)及及種類18ARM指令令及功能描描述助記符指令功能描述ADC帶進(jìn)位元加法指令A(yù)DD加法指令A(yù)ND邏輯與指令B跳移指令BIC位元清零指令BL帶返回的跳移指令BLX帶返回和狀態(tài)切換的跳移指令BX帶狀態(tài)切換的跳移指令CDP輔助運(yùn)算器資料操作指令CMN比較反值指令CMP比較指令EOR互斥指令LDC記憶體到輔助運(yùn)算器的資料傳輸指令LDM載入多個(gè)暫存器指令LDR記憶體到暫存器的資料傳輸指令MCR從ARM暫存器到輔助運(yùn)算器暫存器的資料傳輸指令MLA乘加運(yùn)算指令MOV資料般移指令19ARM指令令及功能描描述助記符指令功能描述MRC從輔助運(yùn)算器暫存器到ARM暫存器的資料傳輸指令MRS般移CPSR或SPSR的內(nèi)容到通用暫存器指令MSR般移通用暫存器到CPSR或SPSR的指令MUL32位元乘法指令MLA32位元乘加指令MVN資料取反般移指令ORR邏輯或指令RSB逆向減法指令RSC帶借位的逆向減法指令SBC帶借位減法指令STC輔助運(yùn)算器暫存器寫(xiě)入記憶體指令STM連續(xù)記憶體字寫(xiě)入指令STR暫存器到記憶體的資料傳輸指令SUB減法指令SWI軟體中斷指令SWP交換指令TEQ相等測(cè)試指令TST位元測(cè)試指令20指令的條件件碼條件碼助記符尾碼旗標(biāo)含義0000EQZ置位相等0001NEZ清零不相等0010CSC置位無(wú)符號(hào)數(shù)大於或等於0011CCC清零無(wú)符號(hào)數(shù)小於0100MIN置位負(fù)數(shù)0101PLN清零正數(shù)或零0110VSV置位溢出0111VCV清零未溢出1000HIC置位Z清零無(wú)符號(hào)數(shù)大於1001LSC清零Z置位無(wú)符號(hào)數(shù)小於或等於1010GEN等於V帶符號(hào)數(shù)大於或等於1011LTN不等於V帶符號(hào)數(shù)小於1100GTZ清零且(N等於V)帶符號(hào)數(shù)大於1101LEZ置位或(N不等於V)帶符號(hào)數(shù)小於或等於1110AL忽略無(wú)條件執(zhí)行21ARM指令令的定址方方式立即定址(ImmediateAddressing)暫存器定址址(RegisterAddressing)暫存器間接接定址(RegisterIndirectAddressing)基址變址定定址(IndexAddressing)多暫存器定定址(MultipleRegisterAddressing)堆疊定址(StackAddressing)22ARM指令令的定址方方式-立即即定址立即定址也也叫立即數(shù)數(shù)定址,這這是一種特特殊的定址址方式,運(yùn)運(yùn)算元本身身就在指令令中給出,,只要取出出指令也就就取到了運(yùn)運(yùn)算元。這這個(gè)運(yùn)算元元被稱為立立即數(shù),對(duì)對(duì)應(yīng)的定址址方式也就就叫做立即即定址。例例如以下指指令:在以上兩條條指令中,,第二個(gè)源源運(yùn)算元即即為立即數(shù)數(shù),要求以以“?!睘闉槭状a,對(duì)對(duì)於以十六六進(jìn)位表示示的立即數(shù)數(shù),還要求求在“#””後加上““0x”或或“&”。。ADDR0,R0,#1;;R0←R0++1ADDR0,R0,#0x3f;;R0←←R0+0x3f23ARM指令令的定址方方式-暫存存器定址暫存器定定址就是是利用暫暫存器中中的數(shù)值值作為運(yùn)運(yùn)算元,,這種定定址方式式是各類類微處理理器經(jīng)常常採(cǎi)用的的一種方方式,也也是一種種執(zhí)行效效率較高高的定址址方式。。以下指指令:該指令的的執(zhí)行效效果是將將暫存器器R1和和R2的的內(nèi)容相相加,其其結(jié)果存存放在暫暫存器R0中。。ADDR0,,R1,,R2;;R0←←R1++R224ARM指指令的定定址方式式-暫存存器間接接定址暫存器間間接定址址就是以以暫存器器中的值值作為運(yùn)運(yùn)算元的的位址,,而運(yùn)算算元本身身存放在在記憶體體中。例例如以下下指令::第一條指指令將以以R1的的值為位位址的記記憶體中中的資料料般移到到R0中中。第二條指指令將R0的值值般移到到以R1的值為為位址的的記憶體體中。LDRR0,,[R1];;R0←[R1]STRR0,,[R1];;[R1]←←R025ARM指指令的定定址方式式-基址址變址定定址基址變址址定址就就是將暫暫存器((該暫存存器一般般稱作基基址暫存存器)的的內(nèi)容與與指令中中給出的的位址偏偏移量相相加,從從而得到到一個(gè)運(yùn)運(yùn)算元的的有效位位址。變變址定址址方式常常用於存存取某基基底位址址附近的的位址單單元。採(cǎi)採(cǎi)用變址址定址方方式的指指令常見(jiàn)見(jiàn)有以下下幾種形形式,如如下所示示:在第一條條指令中中,將暫暫存器R1的內(nèi)內(nèi)容加上上4形成成運(yùn)算元元的有效效位址,,從而取取得運(yùn)算算元存入入暫存器器R0中中。在第二條條指令中中,將暫暫存器R1的內(nèi)內(nèi)容加上上4形成成運(yùn)算元元的有效效位址,,從而取取得運(yùn)算算元存入入暫存器器R0中中,然後後,R1的內(nèi)容容自增4個(gè)位元元組。在第三條條指令中中,以暫暫存器R1的內(nèi)內(nèi)容作為為運(yùn)算元元的有效效位址,,從而取取得運(yùn)算算元存入入暫存器器R0中中,然後後,R1的內(nèi)容容自增4個(gè)位元元組。在第四條條指令中中,將暫暫存器R1的內(nèi)內(nèi)容加上上暫存器器R2的的內(nèi)容形形成運(yùn)算算元的有有效位址址,從而而取得運(yùn)運(yùn)算元存存入暫存存器R0中。LDRR0,,[R1,#4];;R0←[R1++4]LDRR0,,[R1,#4]??;;R0←←[R1+4]、R1←R1+4LDRR0,,[R1],,#4;;R0←←[R1]、R1←R1+4LDRR0,,[R1,R2];;R0←[R1++R2]26ARM指指令的定定址方式式-多暫暫存器定定址採(cǎi)用多暫暫存器定定址方式式,一條條指令可可以完成成多個(gè)暫暫存器值值的般移移。這種種定址方方式可以以用一條條指令完完成般移移最多16個(gè)通通用暫存存器的值值。以下下指令::該指令的的尾碼IA表示示在每次次執(zhí)行完完載入/存儲(chǔ)操操作後,,R0按按字長(zhǎng)度度增加,,因此,,指令可可將連續(xù)續(xù)存儲(chǔ)單單元的值值般移到到R1~~R4。。LDMIAR0,{R1,,R2,,R3,,R4};;R1←←[R0];R2←←[R0+4];R3←←[R0+8];R4←←[R0+12]27ARM指指令的定定址方式式-相對(duì)對(duì)定址與基址變變址定址址方式相相類似,,相對(duì)定定址以程程式計(jì)數(shù)數(shù)器PC的當(dāng)前前值為基基底位址址,指令令中的位位址標(biāo)號(hào)號(hào)作為偏偏移量,,將兩者者相加之之後得到到運(yùn)算元元的有效效位址。。以下程程式段完完成副程程式的使使用和返返回,跳跳移指令令BL採(cǎi)採(cǎi)用了相相對(duì)定址址方式::BLNEXT;;跳移移到副程程式NEXT處處執(zhí)行……NEXT……MOVPC,,LR;;從副程程式返回回28ARM指指令的定定址方式式-堆疊疊定址堆疊是一一種資料料結(jié)構(gòu),,按先進(jìn)進(jìn)後出((FirstInLastOut,,F(xiàn)ILO)的的方式工工作,使使用一個(gè)個(gè)稱作堆堆疊指標(biāo)標(biāo)的專用用暫存器器指示當(dāng)當(dāng)前的操操作位置置,堆疊疊指標(biāo)總總(SP,StackPointer)是指指向堆疊疊頂。當(dāng)堆疊指指標(biāo)指向向最後壓壓入堆疊疊的資料料時(shí),稱稱為滿堆堆疊(FullStack),而而當(dāng)堆疊疊指標(biāo)指指向下一一個(gè)將要要放入資資料的空空位置時(shí)時(shí),稱為為空堆疊疊(EmptyStack)。同時(shí),根根據(jù)堆疊疊的生成成方式,,又可以以分為遞遞增堆疊疊(AscendingStack))和遞減減堆疊((DescendingStack),,當(dāng)堆疊疊由低位位址向高高位址生生成時(shí),,稱為遞遞增堆疊疊,當(dāng)堆堆疊由高高位址向向低位址址生成時(shí)時(shí),稱為為遞減堆堆疊。29ARM支支援四種種堆疊工工作方式式滿遞增堆堆疊堆疊指標(biāo)標(biāo)指向最最後壓入入的資料料,且由由低位址址向高位位址生成成。滿遞減堆堆疊堆疊指標(biāo)標(biāo)指向最最後壓入入的資料料,且由由高位址址向低位位址生成成??者f增堆堆疊堆疊指標(biāo)標(biāo)指向下下一個(gè)將將要放入入資料的的空位置置,且由由低位址址向高地地址生成成??者f減堆堆疊堆疊指標(biāo)標(biāo)指向下下一個(gè)將將要放入入資料的的空位置置,且由由高位址址向低地地址生成成。30ARM指指令集-跳移指指令跳移指令令用於實(shí)實(shí)現(xiàn)程式式流程的的跳移,,在ARM程式式中有兩兩種方法法可以實(shí)實(shí)現(xiàn)程式式流程的的跳移::使用專門門的跳移移指令。。直接向程程式計(jì)數(shù)數(shù)器PC寫(xiě)入跳跳移位址址值。通過(guò)向程程式計(jì)數(shù)數(shù)器PC寫(xiě)入跳跳移位址址值,可可以實(shí)現(xiàn)現(xiàn)在4GB的位位址空間間中的任任意跳移移,在跳跳移之前前結(jié)合使使用。MOVLR,,PC等類似指指令,可可以保存存將來(lái)的的返回位位址值,,從而實(shí)實(shí)現(xiàn)在4GB連連續(xù)的線線性位址址空間的的副程式式使用。。ARM指指令集中中的跳移移指令可可以完成成從當(dāng)前前指令向向前或向向後的32MB的位址址空間的的跳移,,包括以以下4條條指令::B 跳移移指令。。BL帶帶返回的的跳移指指令。BLX帶帶返回回和狀態(tài)態(tài)切換的的跳移指指令。BX帶帶狀態(tài)切切換的跳跳移指令令。31ARM指指令集-跳移指指令-B指令B指令的的語(yǔ)法為為:B{條件件}目目標(biāo)位址址B指令是是最簡(jiǎn)單單的跳移移指令。。一旦遇遇到一個(gè)個(gè)B指指令,,ARM處理理器將立立即跳移移到給定定的目標(biāo)標(biāo)位址,,從那裏裏繼續(xù)執(zhí)執(zhí)行。注注意存儲(chǔ)儲(chǔ)在跳移移指令中中的實(shí)際際值是相相對(duì)當(dāng)前前PC值值的一個(gè)個(gè)偏移量量,而不不是一個(gè)個(gè)絕對(duì)位位址,它它的值由由彙編器器來(lái)計(jì)算算(參考考定址方方式中的的相對(duì)定定址)。。它是24位位元有符符號(hào)數(shù),,左移兩兩位元後後有符號(hào)號(hào)擴(kuò)充為為32位,,表示的的有效偏偏移為26位位(前前後32MB的的位址空空間)。。以下指指令:B Label;;程式無(wú)無(wú)條件跳跳移到標(biāo)標(biāo)號(hào)Label處執(zhí)行行CMPR1,,#0;;當(dāng)當(dāng)CPSR暫存存器中的的Z條件件碼置位位元時(shí),,程式跳跳移到標(biāo)標(biāo)號(hào)Label處執(zhí)行行BEQ Label32ARM指令集集-跳移指令令-BL指令令BL指令的語(yǔ)語(yǔ)法為:BL{條件} 目標(biāo)位位址BL是另一一個(gè)跳移指令令,但跳移之之前,會(huì)在暫暫存器R14中保存PC的當(dāng)前內(nèi)容容,因此,可可以通過(guò)將R14的內(nèi)內(nèi)容重新載入入到PC中,,來(lái)返回到跳跳移指令之後後的那個(gè)指令令處執(zhí)行。該指令是實(shí)現(xiàn)現(xiàn)副程式使用用的一個(gè)基本本但常用的手手段。以下指指令:BL Label ;當(dāng)當(dāng)程式無(wú)條件件跳移到標(biāo)號(hào)號(hào)Label處執(zhí)行時(shí),,同時(shí)將當(dāng)前前的PC值保保存到R14中33ARM指令集集-跳移指令令-BLX指指令BLX指令的的語(yǔ)法為:BLX目目標(biāo)位址BLX指令從從ARM指令令集跳移到指指令中所指定定的目標(biāo)位址址,並將處理理器的工作狀狀態(tài)有ARM狀態(tài)切換到到Thumb狀態(tài),該指指令同時(shí)將PC的當(dāng)前內(nèi)內(nèi)容保存到暫暫存器R14中。因此,,當(dāng)副副程式式使用用Thumb指指令集集,而而使用用者使使用ARM指令令集時(shí)時(shí),可可以通通過(guò)BLX指令令實(shí)現(xiàn)現(xiàn)副程程式的的使用用和處處理器器工作作狀態(tài)態(tài)的切切換。。同時(shí)時(shí),副副程式式的返返回可可以通通過(guò)將將暫存存器R14值複複製到到PC中來(lái)來(lái)完成成。34ARM指令令集-跳移移指令令-BX指指令BX指指令的的語(yǔ)法法為::BX{條件件}目目標(biāo)位位址BX指指令跳跳移到到指令令中所所指定定的目目標(biāo)位位址,,目標(biāo)標(biāo)位址址處的的指令令既可可以是是ARM指指令,,也可可以是是Thumb指指令。。35ARM指令令集-跳移移指令令-資資料處處理指指令資料處處理指指令可可分為為資料般般移指指令資料般般移指指令用用於在在暫存存器和和記憶憶體之之間進(jìn)進(jìn)行資資料的的雙向向傳輸輸。算術(shù)邏邏輯運(yùn)運(yùn)算指指令算術(shù)邏邏輯運(yùn)運(yùn)算指指令完完成常常用的的算術(shù)術(shù)與邏邏輯的的運(yùn)算算,該該類指指令不不但將將運(yùn)算算結(jié)果果保存存在目目的暫暫存器器中,,同時(shí)時(shí)更新新CPSR中的的相應(yīng)應(yīng)條件件旗標(biāo)標(biāo)位元元。比較指指令比較指指令不不保存存運(yùn)算算結(jié)果果,只只更新新CPSR中相相應(yīng)的的條件件旗標(biāo)標(biāo)位元元。36資料處處理指指令總總表MOV資資料般般移指指令MVN資資料取取反般般移指指令CMP比比較指指令CMN反反值比比較指指令TST位位元測(cè)測(cè)試指指令TEQ相相等測(cè)測(cè)試指指令A(yù)DD加加法指指令A(yù)DC帶帶進(jìn)位位元加加法指指令SUB減減法指指令SBC帶帶借位位減法法指令令RSB逆逆向減減法指指令RSC帶帶借位位的逆逆向減減法指指令A(yù)ND邏邏輯與與指令令ORR邏邏輯或或指令令EOR邏邏輯互互斥指指令BIC位位元清清除指指令37ARM指令令集-資料料處理理指令令-MOV指令令MOV指令令的語(yǔ)語(yǔ)法為為:MOV{條條件}{S}目目的的暫存存器,,來(lái)源源運(yùn)算算元MOV指令令可完完成從從另一一個(gè)暫暫存器器、被被移位位的暫暫存器器或?qū)⒁粋€(gè)個(gè)立即即數(shù)載載入到到目的的暫存存器。。其中中S選選項(xiàng)決決定指指令的的操作作是否否影響響CPSR中條條件旗旗標(biāo)位位元的的值,,當(dāng)沒(méi)沒(méi)有S時(shí)指指令不不更新新CPSR中條條件旗旗標(biāo)位位元的的值。。指令範(fàn)例::MOVR1,R0;;將暫存器器R0的值值般移到暫暫存器R1MOVPC,R14;;將暫存存器R14的值般移移到PC,,常用於副副程式返回回MOVR1,R0,LSL#3;;將暫存器器R0的值值左移3位位後般移到到R138ARM指令令集-資料料處理指令令-MVN指令MVN指令令的語(yǔ)法為為:MVN{條條件}{S} 目的的暫存器,,來(lái)源運(yùn)算算元MVN指令令可完成從從另一個(gè)暫暫存器、被被移位的暫暫存器、或或?qū)⒁粋€(gè)立立即數(shù)載入入到目的暫暫存器。與與MOV指指令不同之之處是在般般移之前按按位被取反反了,即把把一個(gè)被取取反的值般般移到目的的暫存器中中。其中S決定定指令的操操作是否影影響CPSR中條件件旗標(biāo)位元元的值,當(dāng)當(dāng)沒(méi)有S時(shí)時(shí)指令不更更新CPSR中條件件旗標(biāo)位元元的值。指令範(fàn)例::MVNR0,#0 ;將將立即數(shù)0取反般移移到暫存器器R0中,,完成後R0=-139ARM指令令集-資料料處理指令令-CMP指令CMP指令令的語(yǔ)法為為:CMP{條條件}運(yùn)運(yùn)算元1,,運(yùn)算元2CMP指指令用於於把一個(gè)個(gè)暫存器器的內(nèi)容容和另一一個(gè)暫存存器的內(nèi)內(nèi)容或立立即數(shù)進(jìn)進(jìn)行比較較,同時(shí)時(shí)更新CPSR中條件件旗標(biāo)位位元的值值。該指指令進(jìn)行行一次減減法運(yùn)算算,但不不存儲(chǔ)結(jié)結(jié)果,只只更改條條件旗標(biāo)標(biāo)位元。。旗標(biāo)位元元表示的的是運(yùn)算算元1與與運(yùn)算元元2的關(guān)關(guān)係(大大、小、、相等),例如如,當(dāng)運(yùn)運(yùn)算元1大於操操作運(yùn)算算元2,,則此後後的有GT尾尾碼的指指令將可可以執(zhí)行行。指令範(fàn)例例:CMPR1,,R0;;將暫暫存器R1的值值與暫存存器R0的值相相減,並並根據(jù)結(jié)結(jié)果設(shè)定定CPSR的旗旗標(biāo)位元元CMPR1,,#100;;將暫存存器R1的值與與立即數(shù)數(shù)100相減,,並根據(jù)據(jù)結(jié)果設(shè)設(shè)定CPSR的的旗標(biāo)位位元40ARM指指令集-資料處處理指令令-CMN指令令CMN指指令的語(yǔ)語(yǔ)法為::CMN{條件}運(yùn)算算元1,,運(yùn)算元元2CMN指指令用於於把一個(gè)個(gè)暫存器器的內(nèi)容容和另一一個(gè)暫存存器的內(nèi)內(nèi)容或立立即數(shù)取取反後進(jìn)進(jìn)行比較較,同時(shí)時(shí)更新CPSR中條件件旗標(biāo)位位元的值值。該指令實(shí)實(shí)際完成成運(yùn)算元元1和運(yùn)運(yùn)算元2相加,,並根據(jù)據(jù)結(jié)果更更改條件件旗標(biāo)位位元。指令範(fàn)例例:CMNR1,,R0;;將暫暫存器R1的值值與暫存存器R0的值相相加,並並根據(jù)結(jié)結(jié)果設(shè)定定CPSR的旗旗標(biāo)位元元CMNR1,,#100;;將暫存存器R1的值與與立即數(shù)數(shù)100相加,,並根據(jù)據(jù)結(jié)果設(shè)設(shè)定CPSR的的旗標(biāo)位位元41ARM指指令令集集-資資料料處處理理指指令令-TST指指令令TST指指令令的的語(yǔ)語(yǔ)法法為為::TST{條條件件}運(yùn)運(yùn)算算元元1,,運(yùn)運(yùn)算算元元2TST指指令令用用於於把把一一個(gè)個(gè)暫暫存存器器的的內(nèi)內(nèi)容容和和另另一一個(gè)個(gè)暫暫存存器器的的內(nèi)內(nèi)容容或或立立即即數(shù)數(shù)進(jìn)進(jìn)行行按按位位的的與與運(yùn)運(yùn)算算,,並並根根據(jù)據(jù)運(yùn)運(yùn)算算結(jié)結(jié)果果更更新新CPSR中中條條件件旗旗標(biāo)標(biāo)位位元元的的值值。。運(yùn)算算元元1是是要要測(cè)測(cè)試試的的資資料料,,而而運(yùn)運(yùn)算算元元2是是一一個(gè)個(gè)位位遮遮罩罩,,該該指指令令一一般般用用來(lái)來(lái)測(cè)測(cè)試試是是否否設(shè)設(shè)定定了了特特定定的的位位。。指令令範(fàn)範(fàn)例例::TSTR1,,##%%1;;用用於於測(cè)測(cè)試試在在暫暫存存器器R1中中是是否否設(shè)設(shè)定定了了最最低低位位((%%表表示示二二進(jìn)進(jìn)位位數(shù)數(shù)字字))TSTR1,,##0xffe;;將將暫暫存存器器R1的的值值與與立立即即數(shù)數(shù)0xffe按按位位元元與與,,並並根根據(jù)據(jù)結(jié)結(jié)果果設(shè)設(shè)定定CPSR的的旗旗標(biāo)標(biāo)位位元元42ARM指指令令集集-資資料料處處理理指指令令-TEQ指指令令TEQ指指令令的的語(yǔ)語(yǔ)法法為為::TEQ{條條件件}運(yùn)運(yùn)算算元元1,,運(yùn)運(yùn)算算元元2TEQ指指令令用用於於把把一一個(gè)個(gè)暫暫存存器器的的內(nèi)內(nèi)容容和和另另一一個(gè)個(gè)暫暫存存器器的的內(nèi)內(nèi)容容或或立立即即數(shù)數(shù)進(jìn)進(jìn)行行按按位位的的互互斥斥運(yùn)運(yùn)算算,,並並根根據(jù)據(jù)運(yùn)運(yùn)算算結(jié)結(jié)果果更更新新CPSR中中條條件件旗旗標(biāo)標(biāo)位位元元的的值值。。該指令令通常常用於於比較較運(yùn)算算元1和運(yùn)運(yùn)算元元2是是否相相等。。指令範(fàn)範(fàn)例::TEQR1,,R2;;將暫暫存器器R1的值值與暫暫存器器R2的值值按位位元互互斥,,並根根據(jù)結(jié)結(jié)果設(shè)設(shè)定CPSR的的旗標(biāo)標(biāo)位元元43ARM指令令集-資料料處理理指令令-ADD指令令A(yù)DD指令令的語(yǔ)語(yǔ)法為為:ADD{條件件}{S}目目的暫暫存器器,運(yùn)運(yùn)算元元1,,運(yùn)算算元2ADD指令令用於於把兩兩個(gè)運(yùn)運(yùn)算元元相加加,並並將結(jié)結(jié)果存存放到到目的的暫存存器中中。運(yùn)運(yùn)算元元1應(yīng)應(yīng)是一一個(gè)暫暫存器器,運(yùn)運(yùn)算元元2可可以是是一個(gè)個(gè)暫存存器,,被移移位的的暫存存器,,或一一個(gè)立立即數(shù)數(shù)。指令範(fàn)例::ADDR0,R1,R2;;R0=R1+R2ADDR0,R1,#256;;R0=R1+256ADDR0,,R2,,R3,,LSL#1;;R0=R2+(R3<<1)44ARM指指令令集集-資資料料處處理理指指令令-ADC指指令令A(yù)DC指指令令的的語(yǔ)語(yǔ)法法為為::ADC{條條件件}{S}目目的的暫暫存存器器,,運(yùn)運(yùn)算算元元1,,運(yùn)運(yùn)算算元元2ADC指指令令用用於於把把兩兩個(gè)個(gè)運(yùn)運(yùn)算算元元相相加加,,再再加加上上CPSR中中的的C條條件件旗旗標(biāo)標(biāo)位位元元的的值值,,並並將將結(jié)結(jié)果果存存放放到到目目的的暫暫存存器器中中。。它它使使用用一一個(gè)個(gè)進(jìn)進(jìn)位位元元旗旗標(biāo)標(biāo)位位元元,,這這樣樣就就可可以以做做比比32位位大大的的數(shù)數(shù)的的加加法法,,注注意意不不要要忘忘記記設(shè)設(shè)定定S尾尾碼碼來(lái)來(lái)更更改改進(jìn)進(jìn)位位元元旗旗標(biāo)標(biāo)。。運(yùn)運(yùn)算算元元1應(yīng)應(yīng)是是一一個(gè)個(gè)暫暫存存器器,,運(yùn)運(yùn)算算元元2可可以以是是一一個(gè)個(gè)暫暫存存器器,,被被移移位位的的暫暫存存器器,,或或一一個(gè)個(gè)立立即即數(shù)數(shù)。。以下下指指令令序序列列完完成成兩兩個(gè)個(gè)128位位數(shù)數(shù)的的加加法法,,第第一一個(gè)個(gè)數(shù)數(shù)由由高高到到低低存存放放在在暫暫存存器器R7~~R4,,第第二二個(gè)個(gè)數(shù)數(shù)由由高高到到低低存存放放在在暫暫存存器器R11~~R8,,運(yùn)運(yùn)算算結(jié)結(jié)果果由由高高到到低低存存放放在在暫暫存存器器R3~~R0::ADDSR0,,R4,,R8;;加加低低端端的的字字ADCSR1,,R5,,R9;;加加第第二二個(gè)個(gè)字字,,帶帶進(jìn)進(jìn)位位ADCSR2,,R6,,R10;;加加第第三三個(gè)個(gè)字字,,帶帶進(jìn)進(jìn)位位ADCR3,,R7,,R11;;加加第第四四個(gè)個(gè)字字,,帶帶進(jìn)進(jìn)位位45ARM指指令令集集-資資料料處處理理指指令令-SUB指指令令SUB指指令令的的語(yǔ)語(yǔ)法法為為::SUB{條條件件}{S}目目的的暫暫存存器器,,運(yùn)運(yùn)算算元元1,,運(yùn)運(yùn)算算元元2SUB指指令令用用於於把把運(yùn)運(yùn)算算元元1減減去去運(yùn)運(yùn)算算元元2,,並並將將結(jié)結(jié)果果存存放放到到目目的的暫暫存存器器中中。。運(yùn)運(yùn)算算元元1應(yīng)應(yīng)是是一一個(gè)個(gè)暫暫存存器器,,運(yùn)運(yùn)算算元元2可可以以是是一一個(gè)個(gè)暫暫存存器器,,被被移移位位的的暫暫存存器器,,或或一一個(gè)個(gè)立立即即數(shù)數(shù)。。該該指指令令可可用用於於有有符符號(hào)號(hào)數(shù)數(shù)或或無(wú)無(wú)符符號(hào)號(hào)數(shù)數(shù)的的減減法法運(yùn)運(yùn)算算。。指令範(fàn)範(fàn)例::SUBR0,R1,,R2;;R0=R1-R2SUBR0,R1,,#256;;R0=R1-256SUBR0,R2,,R3,LSL#1;;R0=R2-(R3<<1)46ARM指令令集-資料料處理理指令令-SBC指令令SBC指令令的語(yǔ)語(yǔ)法為為:SBC{條件件}{S}目目的暫暫存器器,運(yùn)運(yùn)算元元1,,運(yùn)算算元2SBC指令令用於於把運(yùn)運(yùn)算元元1減減去運(yùn)運(yùn)算元元2,,再減減去CPSR中中的C條件件旗標(biāo)標(biāo)位元元的反反碼,,並將將結(jié)果果存放放到目目的暫暫存器器中。。運(yùn)算算元1應(yīng)是是一個(gè)個(gè)暫存存器,,運(yùn)算算元2可以以是一一個(gè)暫暫存器器,被被移位位的暫暫存器器,或或一個(gè)個(gè)立即即數(shù)。。該指指令使使用進(jìn)進(jìn)位元元旗標(biāo)標(biāo)來(lái)表表示借借位,,這樣樣就可可以做做大於於32位的的減法法,注注意不不要忘忘記設(shè)設(shè)定S尾碼碼來(lái)更更改進(jìn)進(jìn)位元元旗標(biāo)標(biāo)。該該指令令可用用於有有符號(hào)號(hào)數(shù)或或無(wú)符符號(hào)數(shù)數(shù)的減減法運(yùn)運(yùn)算。。指令範(fàn)範(fàn)例::SUBSR0,,R1,R2;;R0=R1-R2-!!C,,並根根據(jù)結(jié)結(jié)果設(shè)設(shè)定CPSR的的進(jìn)位位元旗旗標(biāo)位位元47ARM指令令集-資料料處理理指令令-RSB指指令RSB指令令的語(yǔ)語(yǔ)法為為:RSB{條條件}{S}目目的的暫存存器,,運(yùn)算算元1,運(yùn)運(yùn)算元元2RSB指令令稱為為逆向向減法法指令令,用用於把把運(yùn)算算元2減去去運(yùn)算算元1,並並將結(jié)結(jié)果存存放到到目的的暫存存器中中。運(yùn)運(yùn)算元元1應(yīng)應(yīng)是一一個(gè)暫暫存器器,運(yùn)運(yùn)算元元2可可以是是一個(gè)個(gè)暫存存器,,被移移位的的暫存存器,,或一一個(gè)立立即數(shù)數(shù)。該指令令可用用於有有符號(hào)號(hào)數(shù)或或無(wú)符符號(hào)數(shù)數(shù)的減減法運(yùn)運(yùn)算。。指令範(fàn)範(fàn)例::RSBR0,R1,,R2;;R0=R2––R1RSBR0,R1,,#256;;R0=256––R1RSBR0,R2,,R3,LSL#1;;R0=(R3<<1)-R248ARM指令令集-資料料處理理指令令-RSC指令令RSC指令令的語(yǔ)語(yǔ)法為為:RSC{條件件}{S}目目的暫暫存器器,運(yùn)運(yùn)算元元1,,運(yùn)算算元2RSC指令令用於於把運(yùn)運(yùn)算元元2減減去運(yùn)運(yùn)算元元1,,再減減去CPSR中中的C條件件旗標(biāo)標(biāo)位元元的反反碼,,並將將結(jié)果果存放放到目目的暫暫存器器中。。運(yùn)算元元1應(yīng)應(yīng)是一一個(gè)暫暫存器器,運(yùn)運(yùn)算元元2可可以是是一個(gè)個(gè)暫存存器,,被移移位的的暫存存器,,或一一個(gè)立立即數(shù)數(shù)。該該指令令使用用進(jìn)位位元旗旗標(biāo)來(lái)來(lái)表示示借位位,這這樣就就可以以做大大於32位位的減減法,,注意意不要要忘記記設(shè)定定S尾尾碼來(lái)來(lái)更改改進(jìn)位位元旗旗標(biāo)。。該指令令可用用於有有符號(hào)號(hào)數(shù)或或無(wú)符符號(hào)數(shù)數(shù)的減減法運(yùn)運(yùn)算。。指令範(fàn)範(fàn)例::RSCR0,R1,,R2;;R0=R2––R1-??!C49ARM指令令集-資料料處理理指令令-AND指令令A(yù)ND指令令的語(yǔ)語(yǔ)法為為:AND{條件件}{S}目目的暫暫存器器,運(yùn)運(yùn)算元元1,,運(yùn)算算元2AND指令令用於於在兩兩個(gè)運(yùn)運(yùn)算元元上進(jìn)進(jìn)行邏邏輯與與運(yùn)算算,並並把結(jié)結(jié)果放放置到到目的的暫存存器中中。運(yùn)運(yùn)算元元1應(yīng)應(yīng)是一一個(gè)暫暫存器器,運(yùn)運(yùn)算元元2可可以是是一個(gè)個(gè)暫存存器,,被移移位的的暫存存器,,或一一個(gè)立立即數(shù)數(shù)。該該指令令常用用於遮遮罩運(yùn)運(yùn)算元元1的的某些些位。。指令範(fàn)範(fàn)例::ANDR0,R0,,#3;;該該指指令保保持R0的的0、、1位位,其其餘位位清零零。50ARM指指令令集集-資資料料處處理理指指令令-ORR指指令令ORR指指令令的的語(yǔ)語(yǔ)法法為為::ORR{條條件件}{S}目目的的暫暫存存器器,,運(yùn)運(yùn)算算元元1,,運(yùn)運(yùn)算算元元2ORR指指令令用用於於在在兩兩個(gè)個(gè)運(yùn)運(yùn)算算元元上上進(jìn)進(jìn)行行邏邏輯輯或或運(yùn)運(yùn)算算,,並並把把結(jié)結(jié)果果放放置置到到目目的的暫暫存存器器中中。。運(yùn)運(yùn)算算元元1應(yīng)應(yīng)是是一一個(gè)個(gè)暫暫存存器器,,運(yùn)運(yùn)算算元元2可可以以是是一一個(gè)個(gè)暫暫存存器器,,被被移移位位的的暫暫存存器器,,或或一一個(gè)個(gè)立立即即數(shù)數(shù)。。該該指指令令常常用用於於設(shè)設(shè)定定運(yùn)運(yùn)算算元元1的的某某些些位位。。指令範(fàn)例例:ORRR0,R0,#3;;該該指令令設(shè)定R0的0、1位位,其餘餘位保持持不變。。51ARM指指令集-資料處處理指令令-EOR指指令EOR指指令的語(yǔ)語(yǔ)法為::EOR{條件}{S}目的的暫存器器,運(yùn)算算元1,,運(yùn)算元元2EOR指指令用於於在兩個(gè)個(gè)運(yùn)算元元上進(jìn)行行邏輯互互斥運(yùn)算算,並把把結(jié)果放放置到目目的暫存存器中。。運(yùn)算元元1應(yīng)是是一個(gè)暫暫存器,,運(yùn)算元元2可以以是一個(gè)個(gè)暫存器器,被移移位的暫暫存器,,或一個(gè)個(gè)立即數(shù)數(shù)。該指指令常用用於反轉(zhuǎn)轉(zhuǎn)運(yùn)算元元1的某某些位。。指令令範(fàn)範(fàn)例例::EORR0,,R0,,##3;;該該指指令令反反轉(zhuǎn)轉(zhuǎn)R0的的0、、1位位,,其其餘餘位位保保持持不不變變。。52ARM指指令令集集-資資料料處處理理指指令令-BIC指指令令BIC指指令令的的語(yǔ)語(yǔ)法法為為::BIC{條條件件}{S}目目的的暫暫存存器器,,運(yùn)運(yùn)算算元元1,,運(yùn)運(yùn)算算元元2BIC指指令令用用於於清清除除運(yùn)運(yùn)算算元元1的的某某些些位位,,並並把把結(jié)結(jié)果果放放置置到到目目的的暫暫存存器器中中。。運(yùn)運(yùn)算算元元1應(yīng)應(yīng)是是一一個(gè)個(gè)暫暫存存器器,,運(yùn)運(yùn)算算元元2可可以以是是一一個(gè)個(gè)暫暫存存器器,,被被移移位位的的暫暫存存器器,,或或一一個(gè)個(gè)立立即即數(shù)數(shù)。。運(yùn)運(yùn)算算元元2為為32位位的的遮遮罩罩,,如如果果在在遮遮罩罩中中設(shè)設(shè)定定了了某某一一位位,,則則清清除除這這一一位位。。未未設(shè)設(shè)定定的的遮遮罩罩位位保保持持不不變變。。指令範(fàn)範(fàn)例::BICR0,R0,,#%%1011;;該該指指令清清除R0中中的位位0、1、和和3,其其餘的的位保保持不不變。。53ARM指令令集-乘法法指令令與乘乘加指指令A(yù)RM微處處理器器支援援的乘乘法指指令與與乘加加指令令共有有6條條,可可分為為運(yùn)算算結(jié)果果為32位位和運(yùn)運(yùn)算結(jié)結(jié)果為為64位兩兩類,,與前前面的的資料料處理理指令令不同同,指指令中中的所所有運(yùn)運(yùn)算元元、目的暫暫存器器必須須為通通用暫暫存器器,不不能對(duì)對(duì)運(yùn)算算元使使用立立即數(shù)數(shù)或被被移位位的暫暫存器器,同同時(shí),,目的的暫存存器和和運(yùn)算算元1必須須是不不同的的暫存存器。。乘法指指令與與乘加加指令令共有有以下下6條條:MUL32位元元乘法法指令令MLA32位元元乘加加指令令SMULL64位元元有符符號(hào)數(shù)數(shù)乘法法指令令SMLAL64位元元有符符號(hào)數(shù)數(shù)乘加加指令令UMULL64位元元無(wú)符符號(hào)數(shù)數(shù)乘法法指令令UMLAL64位元元無(wú)符符號(hào)數(shù)數(shù)乘加加指令令54ARM指令令集-乘法法指令令與乘乘加指指令-MUL指指令MUL指令令的語(yǔ)語(yǔ)法為為:MUL{條條件}{S}目目的的暫存存器,,運(yùn)算算元1,運(yùn)運(yùn)算元元2MUL指令令完成成將運(yùn)運(yùn)算元元1與與運(yùn)算算元2的乘乘法運(yùn)運(yùn)算,,並把把結(jié)果果放置置到目目的暫暫存器器中,,同時(shí)時(shí)可以以根據(jù)據(jù)運(yùn)算算結(jié)果果設(shè)定定CPSR中相相應(yīng)的的條件件旗標(biāo)標(biāo)位元元。其其中,,運(yùn)算算元1和運(yùn)運(yùn)算元元2均均為32位位元的的有符符號(hào)數(shù)數(shù)或無(wú)無(wú)符號(hào)號(hào)數(shù)。。指令範(fàn)範(fàn)例::MULR0,,R1,R2;;R0=R1××R2MULSR0,R1,,R2;;R0=R1××R2,同同時(shí)設(shè)設(shè)定CPSR中中的相相關(guān)條條件旗旗標(biāo)位位元55ARM指令令集-乘法法指令令與乘乘加指指令-MLA指指令MLA指令令的語(yǔ)語(yǔ)法為為:MLA{條條件}{S}目目的的暫存存器,,運(yùn)算算元1,運(yùn)運(yùn)算元元2,,運(yùn)算算元3MLA指令令完成成將運(yùn)運(yùn)算元元1與與運(yùn)算算元2的乘乘法運(yùn)運(yùn)算,,再將將乘積積加上上運(yùn)算算元3,並並把結(jié)結(jié)果放放置到到目的的暫存存器中中,同同時(shí)可可以根根據(jù)運(yùn)運(yùn)算結(jié)結(jié)果設(shè)設(shè)定CPSR中中相應(yīng)應(yīng)的條條件旗旗標(biāo)位位元。。其中中,運(yùn)運(yùn)算元元1和和運(yùn)算算元2均為為32位元元的有有符號(hào)號(hào)數(shù)或或無(wú)符符號(hào)數(shù)數(shù)。指令範(fàn)範(fàn)例::MLAR0,,R1,R2,,R3;;R0=R1××R2+R3MLASR0,R1,,R2,R3;;R0=R1××R2+R3,,同時(shí)時(shí)設(shè)定定CPSR中的的相關(guān)關(guān)條件件旗標(biāo)標(biāo)位元元56ARM指令令集-乘法法指令令與乘乘加指指令-SMULL指令令SMULL指令令的語(yǔ)法法為:SMULL{條條件}{S}目目的暫暫存器Low,,目的暫暫存器低低High,運(yùn)運(yùn)算元1,運(yùn)算算元2SMULL指令令完成將將運(yùn)算元元1與運(yùn)運(yùn)算元2的乘法法運(yùn)算,,並把結(jié)結(jié)果的低低32位位元放置置到目的的暫存器器Low中,結(jié)結(jié)果的高高32位位元放置置到目的的暫存器器High中,,同時(shí)可可以根據(jù)據(jù)運(yùn)算結(jié)結(jié)果設(shè)定定CPSR中相相應(yīng)的條條件旗標(biāo)標(biāo)位元。。其中,,運(yùn)算元元1和運(yùn)運(yùn)算元2均為32位元元的有符符號(hào)數(shù)。。指令範(fàn)例例:SMULLR0,R1,R2,R3;;R0=((R2××R3)的的低32位;R1=((R2××R3)的的高32位57ARM指指令令集集-乘乘法法指指令令與與乘乘加加指指令令-SMLAL指指令令SMLAL指指令令的的語(yǔ)語(yǔ)法法為為::SMLAL{條條件件}{S}目目的的暫暫存存器器Low,,目目的的暫暫存存器器低低High,,運(yùn)運(yùn)算算元元1,,運(yùn)運(yùn)算算元元2SMLAL指指令令完完成成將將運(yùn)運(yùn)算算元元1與與運(yùn)運(yùn)算算元元2的的乘乘法法運(yùn)運(yùn)算算,,並並把把結(jié)結(jié)果果的的低低32位位元元同同目目的的暫暫存存器器Low中中的的值值相相加加後後又又放放置置到到目目的的暫暫存存器器Low中中,,結(jié)結(jié)果果的的高高32位位元元同同目目的的暫暫存存器器High中中的的值值相相加加後後又又放放置置到到目目的的暫暫存存器器High中中,,同同時(shí)時(shí)可可以以根根據(jù)據(jù)運(yùn)運(yùn)算算結(jié)結(jié)果果設(shè)設(shè)定定CPSR中中相相應(yīng)應(yīng)的的條條件件旗旗標(biāo)標(biāo)位位元元。。其其中中,,運(yùn)運(yùn)算算元元1和和運(yùn)運(yùn)算算元元2均均為為32位位元元的的有有符符號(hào)號(hào)數(shù)數(shù)。。對(duì)於目的暫存存器Low,,在指令執(zhí)行行前存放64位元加數(shù)的的低32位元元,指令執(zhí)行行後存放結(jié)果果的低32位位。對(duì)於目的暫存存器High,在指令執(zhí)執(zhí)行前存放64位元加數(shù)數(shù)的高32位位元,指令執(zhí)執(zhí)行後存放結(jié)結(jié)果的高32位。指令範(fàn)例:SMLALR0,R1,R2,R3;;R0=((R2××R3)的的低32位++R0;R1=((R2××R3)的的高32位++R158ARM指令集集-乘法指令令與乘加指令令-UMULL指令UMULL指指令的語(yǔ)法為為:UMULL{條件}{S} 目的暫暫存器Low,目的暫存存器低High,運(yùn)算元元1,運(yùn)算元元2UMULL指指令完成將運(yùn)運(yùn)算元1與運(yùn)運(yùn)算元2的乘乘法運(yùn)算,並並把結(jié)果的低低32位元放放置到目的暫暫存器Low中,結(jié)果的的高32位元元放置到目的的暫存器High中,同同時(shí)可以根據(jù)據(jù)運(yùn)算結(jié)果設(shè)設(shè)定CPSR中相應(yīng)的條條件旗標(biāo)位元元。其中,運(yùn)運(yùn)算元1和運(yùn)運(yùn)算元2均為為32位元的的無(wú)符號(hào)數(shù)。。指令範(fàn)範(fàn)例::UMULLR0,,R1,R2,,R3;;R0=((R2××R3))的低低32位;R1=((R2××R3))的高高32位59ARM指令令集-乘法法指令令與乘乘加指指令-UMLAL指指令UMLAL指令令的語(yǔ)語(yǔ)法為為:UMLAL{條條件}{S}目目的的暫存存器Low,目目的暫暫存器器低High,,運(yùn)算算元1,運(yùn)運(yùn)算元元2UMLAL指令令完成成將運(yùn)運(yùn)算元元1與與運(yùn)算算元2的乘乘法運(yùn)運(yùn)算,,並把把結(jié)果果的低低32位元元同目目的暫暫存器器Low中中的值值相加加後又又放置置到目目的暫暫存器器Low中中,結(jié)結(jié)果的的高32位位元同同目的的暫存存器High中中的值值相加加後又又放置置到目目的暫暫存器器High中,,同時(shí)時(shí)可以以根據(jù)據(jù)運(yùn)算算結(jié)果果設(shè)定定CPSR中相相應(yīng)的的條件件旗標(biāo)標(biāo)位元元。其其中,,運(yùn)算算元1和運(yùn)運(yùn)算元元2均均為32位位元的的無(wú)符符號(hào)數(shù)數(shù)。對(duì)於目的暫暫存器Low,在指指令執(zhí)行前前存放64位元加數(shù)數(shù)的低32位元,指指令執(zhí)行後後存放結(jié)果果的低32位。對(duì)於目的暫暫存器High,在在指令執(zhí)行行前存放64位元加加數(shù)的高32位元,,指令執(zhí)行行後存放結(jié)結(jié)果的高32位。指令範(fàn)例::UMLAL R0,,R1,R2,R3;R0=((R2××R3))的低32位+R0;R1=((R2××R3)的的高32位++R160ARM指指令集-程式狀狀態(tài)暫存存器存取取指令A(yù)RM微微處理器器支援程程式狀態(tài)態(tài)暫存器器存取指指令,用用於在程程式狀態(tài)態(tài)暫存器器和通用用暫存器器之間般般移資料料,程式式狀態(tài)暫暫存器存存取指令令包括以以下兩條條:MRS 程式式狀態(tài)暫存器器到通用暫存存器的資料般般移指令。MSR 通用用暫存器到程程式狀態(tài)暫存存器的資料般般移指令。61ARM指令集集-程式狀態(tài)態(tài)暫存器存取取指令-MRS指令MRS指令的的語(yǔ)法為:MRS{條件件} 通用暫暫存器,程式式狀態(tài)暫存器器(CPSR或SPSR)MRS指令用用於將程式狀狀態(tài)暫存器的的內(nèi)容般移到到通用暫存器器中。該指令令一般用在以以下幾種情況況:當(dāng)需需要要改改變變程程式式狀狀態(tài)態(tài)暫暫存存器器的的內(nèi)內(nèi)容容時(shí)時(shí),,可可用用MRS將將程程式式狀狀態(tài)態(tài)暫暫存存器器的的內(nèi)內(nèi)容容讀讀入入通通用用暫暫存存器器,,修修改改後後再再寫(xiě)寫(xiě)回回程程式式狀狀態(tài)態(tài)暫暫存存器器。。當(dāng)在在例例外外處處理理或或進(jìn)進(jìn)程程切切換換時(shí)時(shí),,需需要要保保存存程程式式狀狀態(tài)態(tài)暫暫存存器器的的值值,,可可先先用用該該指指令令讀讀出出程程式式狀狀態(tài)態(tài)暫暫存存器器的的值值,,然然後後保保存存。。指令令範(fàn)範(fàn)例例::MRSR0,,CPSR;;般般移移CPSR的的內(nèi)內(nèi)容容到到R0MRSR0,,SPSR;;般般移移SPSR的的內(nèi)內(nèi)容容到到R062ARM指指令令集集-程程式式狀狀態(tài)態(tài)暫暫存存器器存存取取指指令令-MSR指指令令MSR指指令令的的語(yǔ)語(yǔ)法法為為::MSR{條條件件}程程式式狀狀態(tài)態(tài)暫暫存存器器((CPSR或或SPSR))_<域域>,,運(yùn)運(yùn)算算元元MSR指指令令用用於於將將運(yùn)運(yùn)算算元元的的內(nèi)內(nèi)容容般般移移到到程程式式狀狀態(tài)態(tài)暫暫存存器器的的特特定定域域中中。。其其中中,,運(yùn)運(yùn)算算元元可可以以為為通通用用暫暫存存器器或或立立即即數(shù)數(shù)。。<域域>用用於於設(shè)設(shè)定定程程式式狀狀態(tài)態(tài)暫暫存存器器中中需需要要操操作作的的位位元元,,32位位元元的的程程式式狀狀態(tài)態(tài)暫暫存存器器可可分分為為4個(gè)個(gè)域域::位[31:24]為條條件旗標(biāo)標(biāo)位元域域,用f表示;;位[23:16]為狀狀態(tài)位元元域,用用s表示示;位[15:8]為擴(kuò)充充位域,,用x表表示;位[7::0]為為控制位位域,用用c表示示;該指令通通常用於於恢復(fù)或或改變程程式狀態(tài)態(tài)暫存器器的內(nèi)容容,在使使用時(shí),,一般要要在MSR指令令中指明明將要操操作的域域。指令範(fàn)例例:MSRCPSR,R0;;般般移R0的內(nèi)容容到CPSRMSRSPSR,R0;;般般移R0的內(nèi)容容到SPSRMSRCPSR_c,R0;;般移R0的內(nèi)內(nèi)容到SPSR,但僅僅僅修改改CPSR中的的控制位位域63ARM指指令集-載入/存儲(chǔ)指指令A(yù)RM微微處理器器支援載載入/存存儲(chǔ)指令令用於在在暫存器器和記憶憶體之間間般移資資料,載載入指令令用於將將記憶體體中的資資料般移移到暫存存器,存存儲(chǔ)指令令則完成成相反的的操作。。常用的的載入存存儲(chǔ)指令令如下::LDR字字資料料載入指指令LDRB 位元元組資料料載入指指令LDRH 半字字資料載載入指令令STR字字資料料存儲(chǔ)指指令STRB 位元元組資料料存儲(chǔ)指指令STRH 半字字資料存存儲(chǔ)指令令64ARM指指令集-載入/存儲(chǔ)指指令-LDR指令LDR指指令的語(yǔ)語(yǔ)法為::LDR{條件}目的的暫存器器,<記記憶體位位址>LDR指指令用於於從記憶憶體中將將一個(gè)32位元元的字資資料般移移到目的的暫存器器中。該該指令通通常用於於從記憶憶體中讀讀取32位元的的字資料料到通用用暫存器器,然後後對(duì)資料料進(jìn)行處處理。當(dāng)當(dāng)程式計(jì)計(jì)數(shù)器PC作為為目的暫暫存器時(shí)時(shí),指令令從記憶憶體中讀讀取的字字資料被被當(dāng)作目目的地址址,從而而可以實(shí)實(shí)現(xiàn)程式式流程的的跳移。。該指令令在程式式設(shè)計(jì)中中比較常常用,且且定址方方式靈活活多樣,,請(qǐng)讀者者認(rèn)真掌掌握。指令範(fàn)例例:LDRR0,,[R1];;將記憶憶體位址址為R1的字資資料讀入入暫存器器R0。。LDRR0,,[R1,R2];;將記記憶體位位址為R1+R2的字字資料讀讀入暫存存器R0。LDRR0,,[R1,#8];;將記記憶體位位址為R1+8的字資資料讀入入暫存器器R0。。LDRR0,,[R1,R2]!?。?;將將記憶體體位址為為R1+R2的的字資料料讀入暫暫存器R0,並並將新位位址R1+R2寫(xiě)入R1。LDRR0,,[R1,,#8]!?。?;將將記憶憶體位位址為為R1+8的字字資料料讀入入暫存存器R0,,並將將新位位址R1++8寫(xiě)寫(xiě)入R1。。LDRR0,,[R1],R2;;將將記憶憶體位位址為為R1的字字資料料讀入入暫存存器R0,,並將將新位位址R1++R2寫(xiě)入入R1。LDRR0,,[R1,,R2,LSL#2]?。。?;將記記憶體體位址址為R1++R2×4的字字資料料讀入入暫存存器R0,,並將將新位位址R1++R2×4寫(xiě)入入R1。LDRR0,,[R1],R2,,LSL##2;;將將記憶憶體位位址為為R1的字字資料料讀入入暫存存器R0,,並將將新位位址R1++R2×4寫(xiě)入入R1。65ARM指令令集-載入入/存存儲(chǔ)指指令-LDRB指令令LDRB指指令的

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論