版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1ARMARM程序中有兩種方法可以實現(xiàn)PC通過向程序計數(shù)器PC寫入跳轉(zhuǎn)地址值,可以實現(xiàn)在4GB的地址空間中的任意跳轉(zhuǎn),在跳轉(zhuǎn)之前結(jié)合使用MOV,LR,PC等類似指令,可以保存將來的返回地址值,從而實現(xiàn)4GB連續(xù)的線性地址空間的子程序調(diào)用。ARM指令集中的跳轉(zhuǎn)指令可以完成從當(dāng)前指令向前或向后的32MB的地址空間的跳轉(zhuǎn),包括以下4條指令:1、BBB{條件}BB指令,ARM處理器將立即跳轉(zhuǎn)到給定的目標(biāo)地址,從那里繼續(xù)執(zhí)行。注意在跳轉(zhuǎn)指令中的實際值是相對當(dāng)前PC值的一個偏移(參考尋址方式中的相對尋址)243226位(32MB的地BLabelLabelCMPR1,#0CPSRZLabelBEQ2BLBLBL{條件}BL是另一個跳轉(zhuǎn)指令,但跳轉(zhuǎn)之前,會在寄存器R14中保存PC的當(dāng)前內(nèi)容,因此,R14PC指令是實現(xiàn)子程序調(diào)用的一個基本但常用段。以下指令:BLLabelLabelPC中3BLXBLXBLXBLX指令從ARM指令集跳轉(zhuǎn)到指令中所指定的目標(biāo)地址,并將處理器的工作狀態(tài)有ARMThumbPCR14中。因ThumbARMBLX指令實現(xiàn)子程序的調(diào)用和處理器工作狀態(tài)的切換。同時,子程序的返回可以通過將寄存器R14值到PC中來完成。4BXBXBX{條件}BXARM指令,也可以是Thumb指令。 CPSRCPSR161MOVMOVMOV{條件}{S}MOV指令可完成從另一個寄存器、被移位的寄存SCPSR中條件標(biāo)志位的值,當(dāng)沒有S時指令不更新CPSR中條件標(biāo)志位的值。MOVR1R0R0MOVPC,R1R14PC,常用于子程序返回MOVR1,R0,LSL#3;將寄存器R03位后傳送到R12、MVN指令MVNMVN{條件}{S}MVN指令可完成從另一個寄存器、被移位的寄存器、或?qū)⒁粋€立即數(shù)加載到目的寄存器。與MOV指令不同之處是在傳送之前按位被取反了,即把一個被取反的值傳送到目的寄存器中。其中S決定指令的操作是否影響CPSR中條件標(biāo)志位的值,當(dāng)沒有S時指令不更新CPSR中條件標(biāo)志位的值。MVNR000取反傳送到寄存器R0R0=-13、CMP指令CMPCMP{條件}1CMP指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進(jìn)行比較,同時更新CPSR中條件標(biāo)志位的值。該指令進(jìn)行一次減法運算但不結(jié)果,只更改條件標(biāo)志位。12的關(guān)系(大、小、相等)1大于操作操作數(shù)2,則此后的有GT后綴的指令將可以執(zhí)行。CMPR1,R0R1R0CPSR的標(biāo)志CMPR1,#100R1100CPSR的標(biāo)志4CMNCMNCMN{條件}1CMN指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)取反后進(jìn)行比較,同CPSR12相加,并根據(jù)結(jié)CMNR1,R0;將寄存器R1的值與寄存器R0的值相加,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)CMNR1100R1100CPSR5TSTTSTTST{條件}1TSTCPSR12是TSTR1,#%1;用于測試在寄存器R1中是否設(shè)置了最低位(%表示二進(jìn)制數(shù))TSTR10xffeR10xffeCPSR6、TEQTEQTEQ{條件}1,操作數(shù)TEQ指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進(jìn)行按位的異或運算,CPSR12是否相等。TEQR1R2R1R2CPSR的7ADDADDADD{條件}{S}1ADD指令用于把兩個操作數(shù)相加,并將結(jié)果存放到目的寄存器中。操作數(shù)1應(yīng)是一個寄存器,操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。ADDR0,R1,R2;R0=R1+R2ADDR0,R1,#256;R0=R1+256ADDR0,R2,R3,LSL#1;R0=R2+(R3<<8、ADCADCADC{條件}{S}1ADCCPSRC條件標(biāo)志位的值,并將結(jié)果存放32要忘記設(shè)置S后綴來更改進(jìn)位標(biāo)志。12以下指令序列完成兩個128位數(shù)的加法,第一個數(shù)由高到低存放在寄存器R7~R4,第二個數(shù)由高到低存放在寄存器R11~R8,運算結(jié)果由高到低存放在寄存器R3~R0:ADDSR0,R4,R8;加的ADCSR1,R5,R9;加第二個字,帶進(jìn)位ADCSR2,R6,R10ADCR3,R7,R11;加第,帶進(jìn)位9、SUB指令SUBSUB{條件}{S}1SUB指令用于把操作數(shù)1減去操作數(shù)2,并將結(jié)果存放到目的寄存器中。操作數(shù)1應(yīng)是2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。該指令可用SUBR0,R1,R2;R0=R1-R2SUBR0,R1,#256;R0=R1-256SUBR0,R2,R3,LSL#1;R0=R2-(R3<<10、~~~~C~~~~C~~~~C{條件}{S}1~~~~C12CPSRC條件標(biāo)志位的反碼,并12可以是一個寄存器,該指令使用進(jìn)位標(biāo)志來表示借位,這樣就可以做大于32位的減法,注意記設(shè)置SUBSR0,R1,R2;R0=R1--!CCPSRR~~~~{條件}{S}1R~~~~指令稱為逆向減法指令,用于把操作數(shù)2減去操作數(shù)1,并將結(jié)果存放到目的寄存12可以是一個寄存器,被移位的寄存器,或一個R~~~~R0,R1,R2;R0=R2–R1R~~~~R0,R1,#256;R0=256–R1R~~~~R0,R2,R3,LSL#1;=(R3<<1)-12、RSCRSCRSC{條件}{S}1RSC指令用于把操作數(shù)2減去操作數(shù)1,再減去CPSRC12位的減法,注意記設(shè)置S后綴來更改進(jìn)位標(biāo)志。該指令可用于有符號數(shù)或無符號RSCR0,R1,R2;R0=R2–R1-!13、ANDANDAND{條件}{S}1AND1應(yīng)是一個寄存器,操作數(shù)2令常用于操作數(shù)1的某些位。ANDR0,R0,#30、114、ORRORRORR{條件}{S}1ORR1應(yīng)是一個寄存器,操作數(shù)2令常用于設(shè)置操作數(shù)1的某些位。ORRR0,R0,#3R00、115、EOREOREOR{條件}{S}1EOR1應(yīng)是一個寄存器,操作數(shù)2令常用于反轉(zhuǎn)操作數(shù)1的某些位。EORR0,R0,#3R00、116、BICBICBIC{條件}{S}1BIC指令用于清除操作數(shù)1的某些位,并把結(jié)果放置到目的寄存器中。操作數(shù)122BICR0R01011R0013,ARM632位和運算結(jié)64位兩類,與前面的數(shù)據(jù)處理指令不同,指令中的所有操作數(shù)、目的寄存器必須為通1必61MULMULMUL{條件}{S}1MUL12的乘法運算,并把結(jié)果放置到目的寄存器中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。1232位的有符號數(shù)或無符號數(shù)。MULR0,R1,R2;R0=R1×MULSR0,R1,R2;R0R1R22MLAMLAMLA{條件}{S}12MLA指令完成將操作數(shù)1與操作數(shù)2的乘法運算,再將乘積加上操作數(shù)3,并把結(jié)果放置到目的寄存器中同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。其中作數(shù)1和操作數(shù)2均為32位的有符號數(shù)或無符號數(shù)。MLAR0,R1,R2,R3;R0=R1×R2+R3MLASR0,R1,R2,R3;R0R1R2R3,同CPSR3SMULLSMULLSMULL{條件}{S}LowHigh1SMULL1232位放置到目的寄存器Low中,結(jié)果的高32位放置到目的寄存器High中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1和操作數(shù)2均為32位的有符號數(shù)。SMULLR0,R1,R2,R3;R0=(R2R3)32;R1=(R2R3)324SMLALSMLALSMLAL{條件}{S}LowHigh1SMLAL指令完成將操作數(shù)1與操作數(shù)2的乘法運算,并把結(jié)果的低32位同目的寄存LowLow32High中的值相加后又放置到目的寄存器High中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的1232643232High643232位。SMLALR0,R1R2R3R0=(R2R3)的低32R1=(R2R3)32R15、UMULL指令UMULLUMULL{條件}{S}LowHigh,操作數(shù)1,操作數(shù)2UMULL1232位放置到目的寄存器Low中,結(jié)果的高32位放置到目的寄存器High中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1和操作數(shù)2均為32位的無符號數(shù)。UMULLR0,R1,R2,R3;R0=(R2R3)32;R1=(R2R3)326UMLALUMLALUMLAL{條件}{S}LowHigh1UMLAL1232位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,結(jié)果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1和操作數(shù)2均為32位的無符號數(shù)。Low,在指令執(zhí)行前存放64位加數(shù)的低32低32High6432的高32位。UMLALR0R1R2R3R0=(R2R3)的低32R1=(R2R3)的高321MRSMRSMRS{條件}通用寄存器,程序狀態(tài)寄存器(CPSRMRS指令用于將程序狀態(tài)寄存器的內(nèi)容傳送到通用寄存器中。該指令MRS將程序狀態(tài)寄存器的內(nèi)容讀入通用寄MRSR0,CPSRCPSRR0MRSR0,SPSR;傳送SPSR的內(nèi)容到R02、MSR指令MSRMSR{條件}程序狀態(tài)寄存器(CPSRSPSR)_<域>MSR指令用于將操作數(shù)的內(nèi)容傳送到程序狀態(tài)寄存器的特定域中。其中,操作數(shù)可以為通用寄存器或立即數(shù)。<域>用于設(shè)置程序狀態(tài)寄存器中需要操作的位,32位的程序狀態(tài)寄存器可分為4個域:位[31:24]f表示;位[23:16]為狀態(tài)位域,用s表示;位[15:8]x表示;位[7:0]為控制位域,用c表示;在MSR指令中指明將要操作的域。MSRCPSR,R0R0CPSRMSRSPSR,R0;傳送R0的內(nèi)容到SPSRMSRCPSR_cR0R0SPSRARM微處理器支持加載/指令用于在寄存器和器之間傳送數(shù)據(jù),加載指令用于將器中的數(shù)據(jù)傳送到寄存器,指令則完成相反的操作。常用的加載指令如下:1、LDR指令LDRLDR{條件}目的寄存器,<器地址LDR指令用于從器中將一個32位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。該指令通常用于從器中32位的字?jǐn)?shù)據(jù)到通用寄存器,然后對數(shù)據(jù)進(jìn)行處理。當(dāng)程序計數(shù)器PC作LDRR0,[R1];將器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0LDRR0,[R1,R2];將器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0。LDRR0,[R1,#8];將器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0。+R2R1LDRR0,[R1,#8]??;將器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址+8R1LDRR0,[R1],R2;將器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1LDRR0,[R1,R2,LSL#2]?。粚⑵鞯刂窞镽1+R2×4的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。LDRR0,[R1],R2,LSL#2;將器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。2、LDRBLDRBLDR{條件}B目的寄存器,<器地址LDRB指令用于從器中將一個8位的字節(jié)數(shù)據(jù)傳送到目的寄存器中,同時將寄存器的高24位清零。該指令通常用于從器中8位的字節(jié)數(shù)據(jù)到通用寄存器,然后對數(shù)的地址,從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。LDRBR0,[R1];將器地址為R0R024LDRBR0,[R1,#8];將器地址為R1+8的字節(jié)數(shù)據(jù)讀入寄存R0R0243、LDRHLDRHLDR{條件}H目的寄存器,<器地址LDRH指令用于從器中將一個16位的半字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時將寄存器的高16位清零。該指令通常用于從器中16位的半字?jǐn)?shù)據(jù)到通用寄存器,然后對數(shù)據(jù)進(jìn)行處理。當(dāng)程序計數(shù)器PC作為目的寄存器時,指令從器中的字?jǐn)?shù)據(jù)被當(dāng)作目的地址,從而可以實現(xiàn)程序流LDRHR0,[R1];將器地址為R1的半字?jǐn)?shù)據(jù)讀入寄存器R0,并將R0的高16位LDRHR0,[R1,#8];將器地址為R1+8的半字?jǐn)?shù)據(jù)讀入寄存器R0,并將R0的高16位清零。LDRHR0,[R1,R2];將器地址為R1+R2的半字?jǐn)?shù)據(jù)讀入寄存器R0,并將R0的高16位清零。4、STRSTRSTR{條件}源寄存器,<器地址STR指令用于從源寄存器中將一個32位的字?jǐn)?shù)據(jù)傳送到器中。該指令在程序設(shè)計中比較常用,且尋址方式靈活多樣,使用方式可參考指令LDR。STRR0,[R1],#8;將R0中的字?jǐn)?shù)據(jù)寫入以R1為地址的器中,并將新地址+8R1STRR0,[R1,#8];將R0中的字?jǐn)?shù)據(jù)寫入以R1+8為地址的器中5、STRBSTRBSTR{條件}B源寄存器,<器地址STRB指令用于從源寄存器中將一個8位的字節(jié)數(shù)據(jù)傳送到器中。該字節(jié)數(shù)據(jù)為源寄存器中的低8位。STRBR0,[R1];將寄存器R0中的字節(jié)數(shù)據(jù)寫入以R1為地址的器中STRBR0,[R1,#8];將寄存器R0中的字節(jié)數(shù)據(jù)寫入以R1+8為地址的器中6、STRHSTRHSTR{條件}H源寄存器,<器地址STRH指令用于從源寄存器中將一個16位的半字?jǐn)?shù)據(jù)傳送到器中。該半字?jǐn)?shù)據(jù)為源寄存器中的低16位。STRHR0,[R1];將寄存器R0中的半字?jǐn)?shù)據(jù)寫入以R1為地址的器中STRHR0,[R1,#8];將寄存器R0中的半字?jǐn)?shù)據(jù)寫入以R1+8為地址的器中。六批量數(shù)據(jù)加載/指令A(yù)RM微處理器所支持批量數(shù)據(jù)加載/指令可以一次在一片連續(xù)的器單元和多個寄存器之間傳送數(shù)據(jù),批量加載指令用于將一片連續(xù)的器中的數(shù)據(jù)傳送到多個寄存器,批量數(shù)據(jù)指令則完成相反的操作。常用的加載指令如LDM(STM)LDM(STM)LDM(STM){條件}{類型}基址寄存器{!},寄存器列表LDM(或STM)指令用于從由基址寄存器所指示的一片連續(xù)器到寄存器列表所指示的IA每次傳送后地址加1;IB每次傳送前地址加1;DA1;DB1;FD滿遞減堆棧;ED空遞減堆棧;FA滿遞增堆棧;EAR15R0~R15{∧}還將SPSR到CPSR。同時該后綴還表示傳入或傳出的是用戶模式下的寄存器,而}}七、指令1、SWP指令SWPSWP{條件}1,[SWP指令用于將源寄存器2所指向的器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中同時將源寄存器1中的字?jǐn)?shù)據(jù)傳送到源寄存器2所指向的器中。顯然當(dāng)源寄存器1和目的寄存器為同一個寄存器時,指令交換該寄存器和器的內(nèi)容。SWPR0,R1,[R2];將R2所指向的器中的字?jǐn)?shù)據(jù)傳送到R0,同時將R1中的字?jǐn)?shù)據(jù)傳送到R2所指向的單元。2、SWPBSWPBSWP{條件}B1,[SWPB指令用于將源寄存器2所指向的器中的字節(jié)數(shù)據(jù)傳送到目的寄存器中,目的寄存器的高24清零同時將源寄存器1中的字節(jié)數(shù)據(jù)傳送到源寄存器2所指向的器中。顯然當(dāng)源寄存器1和目的寄存器為同一個寄存器時指令交換該寄存器和器的內(nèi)容。SWPBR0,R1,[R2];將R2所指向的器中的字節(jié)數(shù)據(jù)傳送到R0,R0的高位清零,同時將R1中的低8位數(shù)據(jù)傳送到R2所指向的單元SWPBR0,R0,[R1];該指令完成將R1所指向的器中的字節(jié)數(shù)據(jù)與R0中的低8位八、移位指令(操作)1、LSL(ASL)操作LSL(或ASL)操作的格式為:通用寄存器,LSL(ASL)LSL(或ASL)可完成對通用寄存器中的內(nèi)容進(jìn)行邏輯(或算術(shù))的左移操作,按操作數(shù)即數(shù)(0~31)MOVR0,R1,LSL#2R1R02、LSRLSR通用寄存器,LSRLSR端用零來填充。其中,操作數(shù)可以是通用寄存器,也可以是立即數(shù)(0~31)。MOVR0,R1,LSR#2R1R0中,左端用3、ASRASR通用寄存器,ASRASR可完成對通用寄存器中的內(nèi)容進(jìn)行右移的操作,按操作數(shù)所指定的數(shù)量向右移位,左31位的值來填充。其中,操作數(shù)可以是通用寄存器,也可以是立即數(shù)(0~31)MOVR0,R1,ASR#2R1R031位的值來4、RORROR通用寄存器,RORROR可完成對通用寄存器中的內(nèi)容進(jìn)行循環(huán)右移的操作,按操作數(shù)所指定的數(shù)量向右循環(huán)31)。顯然,當(dāng)進(jìn)行32位的循環(huán)右移操作時,通用寄存器中的值不改變。MOVR0,R1,ROR#2R1R05、RRXRRX通用寄存器,RRXRRX可完成對通用寄存器中的內(nèi)容進(jìn)行帶擴(kuò)展的循環(huán)右移的操作,按操作數(shù)所指定的數(shù)量C是立即數(shù)(0~31)。MOVR0,R1,RRX#2R1R0中。1、CDPCDPCDP{條件}協(xié)處理器編碼,協(xié)處理器操作碼1,目的寄存器,源寄存器1,源寄存器2,協(xié)處理器操作碼2。CDP指令用于ARM處理器通知ARM協(xié)處理器執(zhí)行特定的操作,若協(xié)處理器不能成功完12為協(xié)處理器的寄存器和器。CDPP3,2,C12,C10,C3,42、LDCLDCLDC{條件}{L}協(xié)處理器編碼,目的寄存器,[源寄存器LDC指令用于將源寄存器所指向的器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中,若協(xié)處理器不能成功完成傳送操作,則產(chǎn)生未定義指令異常。其中,{L}選項表示指令為長操作,LDCP3,C4,[R0];將ARM處理器的寄存器R0所指向的器中的字?jǐn)?shù)據(jù)傳送到協(xié)處理器P3的寄存器C4中。3、STCSTCSTC{條件}{L}協(xié)處理器編碼,源寄存器,[目的寄存器STC指令用于將源寄存器中的字?jǐn)?shù)據(jù)傳送到目的寄存器所指向的器中,若協(xié)處理器不能成功完成傳送操作,則產(chǎn)生未定義指令異常。其中,{L}選項表示指令為長操作,STCP3,C4,[R0]P3C4中的字?jǐn)?shù)據(jù)傳送到ARM處理器的寄存器R0所指向的器中。4、MCRMCRMCR{條件112,協(xié)處理器操作碼2。MCR指令用于將ARM處理器寄存器中的數(shù)據(jù)傳送到協(xié)處理器寄存器中,若協(xié)處理器不能12為協(xié)處理器將要執(zhí)行的操作,源寄存器為ARM處理器的寄存器,目的寄存器1和目的寄存器2均為協(xié)處理器的寄存器。MCRP3,3,R0,C4,C5,6ARMR0中的數(shù)據(jù)傳送到協(xié)處理器P3的寄存器C4和C5中。5、MRCMRCMRC{條件}協(xié)處理器編碼,協(xié)處理器操作碼1,目的寄存器,源寄存器1,源寄存器2,協(xié)處理器操作碼2。MRC指令用于將協(xié)處理器寄存器中的數(shù)據(jù)傳送到ARM處理器寄存器中,若協(xié)處理器不能ARM1MRCP3,3,R0,C4,C5,6ARM處理器寄存器中。十、異常產(chǎn)生指令1、SWI指令SWISWI{條件24系統(tǒng)例程的類型由通用寄存器R0的內(nèi)容決定,同時,參數(shù)通過其他通用寄存器傳遞。SWI0x02;該指令調(diào)用操作系統(tǒng)位02的系統(tǒng)例程2、BKPTBKPTBKPT16BKPT指令產(chǎn)生斷點中斷,可用于程序的調(diào)試2ARM在ARMARM4種偽指令:符號定義偽指令、數(shù)據(jù)定義偽指令、匯編控(SymbolDefinition)符號定義偽指令用于定義ARM匯編程序中的變量、對變量賦值以及定義寄存器的別名等操作。常見的符號定義偽指令有如下4種:1GBLA、GBLLGBLA(GBLLGBLS)GBLAGBLLGBLSARMGBLAGBLLF(假)GBLSGBLATest1Test1Test1SETA0xaa;將該變量賦值為0xaaGBLLTest2Test2Test2SETL{TRUE};將該變量賦值為真GBLSTest3Test3Test3SETS“Testing”;將該變量賦值為“Testing”2LCLA、LCLLLCLA(LCLLLCLS)LCLA、LCLLLCLSARM程序中的局部變量,LCLALCLLF(假)LCLSLCLATest4;一個局部的數(shù)字變量,變量名為Test4Test3SETA0xaa;將該變量賦值為0xaaLCLLTest5;一個局部的邏輯變量,變量名為Test5Test4SETL{TRUE};將該變量賦值為真LCLSTest6Test6Test6SETS“Testing”;將該變量賦值為“Testing”3SETA、SETLSETA(SETLSETS)SETASETLSETSSETA偽指令用于給一個數(shù)學(xué)變量賦值;SETL偽指令用于給一個邏輯變量賦值;SETS偽指令用于給一個字符串變量賦值;LCLATest3;一個局部的數(shù)字變量,變量名為Test3Test3SETA0xaa;將該變量賦值為0xaaLCLLTest4;一個局部的邏輯變量,變量名為Test4Test4SETL{TRUE};將該變量賦值為真4RLIST寄存器列表RLIST偽指令可用于對一個通用寄存器列表定義名稱,使用該偽指令定義的名稱可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器次序為根據(jù)寄存器的由低到高,而與列表中的寄存器排列次序無關(guān)。RegListRLIST{R0-R5,R8,R10}RegListARMLDM/STM中通過該名稱寄存器列表。二、數(shù)據(jù)定義(DataDefinition)偽指令數(shù)據(jù)定義偽指令一般用于為特定的數(shù)據(jù)分配單元,同時可完成已分配單元的初始化。常見的數(shù)據(jù)定義偽指令有如下9種:1、DCBDCB偽指令用于分配一片連續(xù)的字節(jié)單元并用偽指令中指定的表達(dá)式初始化。其中,表達(dá)式可以為0~255的數(shù)字或字符串。DCB也可用“=”代替。StrDCB“Thisisatest!”;分配一片連續(xù)的字節(jié)單元并初始化2DCW(DCW(DCWU)用DCW分配的字單元是半字對齊的,而用DCWU分配的字單元并不嚴(yán)格半字DataTestDCW1,2,3;分配一片連續(xù)的半字單元并初始化3DCD(DCD(DCDU)DCD(或DCDU)偽指令用于分配一片連續(xù)的字單元并用偽指令DCD也可用“&”代替。用DCD分配的字單元是字對齊的,而用DCDU分配的字DataTestDCD4,5,6;分配一片連續(xù)的字單元并初始化4DCFD(DCFD(DCFDU)DCFD(或DCFDU)偽指令用于為雙精度的浮點數(shù)分配一片連續(xù)的字單元并用偽指令中指定的表達(dá)式初始化。每個雙精度的浮點數(shù)占據(jù)兩個字單元。用DCFD分配的字單元是字對齊的,而用DCFDU分配的字單元并不嚴(yán)格字對齊。5DCFS(DCFS(DCFSU)DCFS(或DCFSU)偽指令用于為單精度的浮點數(shù)分配一片連續(xù)的字單元并用偽指令DCFS分配的字單元是字對齊的,而用DCFSU分配的字單元并不嚴(yán)格字對齊。FDataTestDCFS2E5,-5E-7;分配一片連續(xù)的字單元并初始化為指定的單精度數(shù)6DCQ(DCQ(DCQU)DCQ(或DCQU)偽指令用于分配一片以8個字節(jié)為單位的連續(xù)區(qū)域并用偽指令中指定的表達(dá)式初始化。用DCQ分配的單元是字對齊的,而用DCQU分配的單元并DataTestDCQ100;分配一片連續(xù)的單元并初始化為指定的值7SPACESPACE偽指令用于分配一片連續(xù)的區(qū)域并初始化為0。其中,表達(dá)式為要分配的字節(jié)數(shù)。SPACE也可用“%”代替。DataSpaceSPACE100;分配連續(xù)100字節(jié)的單元并初始化為0。8、MAP語法格式:MAP表達(dá)式{,基址寄存器MAPMAP的值與基址寄存器的和。MAP偽指令通常與FIELD偽指令配合使用來定義結(jié)構(gòu)化的內(nèi)存MAP0x100,R00x100+R0。9、FILEDFIELDFIELD偽指令用于定義一個結(jié)構(gòu)化內(nèi)存表中的數(shù)據(jù)域。FILED#FIELDMAP偽指令配合使用MAPFIELD偽指令定義內(nèi)存表中的各個數(shù)據(jù)域,并可以為每個數(shù)據(jù)域指定一個標(biāo)號供其他的指令。注意MAP和FIELD偽指令僅用于定義數(shù)據(jù)結(jié)構(gòu),并不實際分配單元。MAP0x1000x100AFIELD16A16BFIELD32B32SFIELD256S256(AssemblyControl)包括以下4條:1IF、ELSE、IF邏輯表達(dá)式指令序列12IF、ELSE、ENDIFIF后面12。其中,ELSE2IF1,否則繼續(xù)執(zhí)行后面的IF、ELSE、ENDIF偽指令可以嵌套使用。GBLLTest;一個全局的邏輯變量,變量名為IFTest=122WHILE、WHILE邏輯表達(dá)式WHILEWENDWHILEWHILE、WEND偽指令可以嵌套使用。GBLACounter;一個全局的數(shù)學(xué)變量,變量名為CounterCounterSETA3;由變量Counter控制循環(huán)次數(shù)WHILECounter<3MACRO、$$1,$2O、END偽指令可以將一段代碼定義為一個整體,稱為宏指令,然后就可以在$省空并提高行速度在使用程序結(jié)需要保護(hù)場從而加了系的開銷O和D之間指令列稱為定義體,宏定體的第一應(yīng)的原型(含宏)OD4MEXIT用于從宏定義中跳轉(zhuǎn)出去。131、AREA屬性1,屬性2,AREA偽指令用于定義一個代碼段或數(shù)據(jù)段。其中,若以數(shù)字開頭,則該需用“|”括起來,如|1_test|。屬性字段表示該代碼段(或CODEREADONLYREADWRITEALIGNALIGN表達(dá)式。在默認(rèn)時,ELF(可執(zhí)行連接文件)的代碼0~312表達(dá)式次方。COMMON中同名的COMMON段共享同一段單元。一個匯編語言程序至少要包含一個段,當(dāng);該偽指令定義了一個代碼段,為Init,屬性為只讀2、ALIGNALIGN表達(dá)式{,偏移量ALIGN偽指令可通過添加填充字節(jié)的方式,使當(dāng)前位置滿足一定的對其方式。其中,表達(dá)21、2、48、16等。若未指定表達(dá)當(dāng)前位置的對齊方式為:2的表達(dá)式次冪+偏移量。AREAInit,CODE,READONLY,ALIEN=38字節(jié)對齊。3CODE16、CODE16(CODE1616Thumb指令。CODE32偽指令通知編譯器,其后的指令序列為32位的ARM指令。若在匯編源程序中同時包含ARM指令和Thumb指令時,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程建設(shè)管理與施工標(biāo)準(zhǔn)化作業(yè)指導(dǎo)書
- 工程項目管理規(guī)范操作流程解讀
- 游戲開發(fā)實踐作業(yè)指導(dǎo)書
- 農(nóng)業(yè)信息化技術(shù)推廣應(yīng)用作業(yè)指導(dǎo)書
- 標(biāo)準(zhǔn)鋼材購銷合同
- 測繪勞務(wù)分包合同
- 出口銷售合同
- 小麥種子購銷合同
- 員工試用勞動合同
- 2025年呼和浩特道路貨運從業(yè)資格證模擬考試
- 2025中國煙草/中煙工業(yè)招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 2025至2030年中國PVC熱縮封帽數(shù)據(jù)監(jiān)測研究報告
- 2025年遼寧農(nóng)業(yè)職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024年參考題庫含答案解析
- 《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》解讀與培訓(xùn)
- 2025年市場營銷人員工作計劃
- 2024年徐州工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2025年枝江金潤源建設(shè)集團(tuán)招聘筆試參考題庫含答案解析
- 危險化學(xué)品安全監(jiān)管培訓(xùn)
- 病原生物學(xué)-人體寄生蟲學(xué)知到智慧樹章節(jié)測試課后答案2024年秋浙江大學(xué)
- 2024-2030年中國醫(yī)療建筑工程行業(yè)發(fā)展?jié)摿巴顿Y戰(zhàn)略規(guī)劃分析報告
- 人工智能導(dǎo)論知到智慧樹章節(jié)測試課后答案2024年秋天津大學(xué)
評論
0/150
提交評論