第3章arm微處理器的指令系統(tǒng)_第1頁(yè)
第3章arm微處理器的指令系統(tǒng)_第2頁(yè)
第3章arm微處理器的指令系統(tǒng)_第3頁(yè)
第3章arm微處理器的指令系統(tǒng)_第4頁(yè)
第3章arm微處理器的指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

3ARM微處理器的指令A(yù)RMThumbARMARM微處理器的指令的分類與果都要放回寄存器中,而對(duì)系統(tǒng)器的則需要通過專門的加載/指令來完成。令、加載/指令、協(xié)處理器指令和異常產(chǎn)生指令六大類,具體的指令及功能如表3-1所示(表表3- ARM指令及功能描加法指B跳轉(zhuǎn)指位指比較指異或指從ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳輸指從協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳輸指?jìng)魉虲PSRSPSR的內(nèi)容到通用寄存器指?jìng)魉屯ㄓ眉拇嫫鞯紺PSRSPSR的指3232協(xié)處理器寄存器寫入器指寄存器到器的數(shù)據(jù)傳輸指減法指交換指指令的條件表3- Z置相ZC置CN置負(fù)N正數(shù)或V置溢VC置位ZCZ置N等于N不等于Z且(N等于Z置位或(N不等于忽立即尋ADD ADD 寄存器尋ADD 寄存器間接尋ADD LDR STR R0中。第二條指令將以R1的值為地址的器中的數(shù)據(jù)傳送到R0中。第三條指令將R0的值傳送到以R1的值為地址的器中?;纷冎穼ひ屏肯嗉?,從而得到一個(gè)操作數(shù)的有效地址。變址尋址方式常用于某址附近的地址單LDR LDR LDRR0,[R1 LDR R14形成操作數(shù)的有效地址,從而取得操作數(shù)存入寄R0中。R14形成操作數(shù)的有效地址,從而取得操作數(shù)存入寄R0中,然后,R14個(gè)字節(jié)。中,然后,R14R0中。多寄存器尋16個(gè)通用寄存器的值。以下指令:LDMIA R1~R4。相對(duì)尋與基址變址尋址方式相類似,相對(duì)尋址以程序計(jì)數(shù)器PC的當(dāng)前值為址,指令中的地址標(biāo)BL采用了相對(duì)尋址方式:BL ;跳轉(zhuǎn)到子程序NEXT處執(zhí)MOV 堆棧尋堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(FirstInLastOut,F(xiàn)ILO)的方式工作,使用一個(gè)稱作堆棧將要放入數(shù)據(jù)的空位置時(shí),稱為空堆棧(EmptyStack)。遞減堆棧。這樣就有四種類型的堆棧工作方式,ARM微處理器支持這四種類型的堆棧工作方式,ARM跳轉(zhuǎn)指跳轉(zhuǎn)指令用于實(shí)現(xiàn)程序流程的跳轉(zhuǎn),在ARMMOVARM32MB的地址空間的跳轉(zhuǎn),包括4條指令: BL帶返回的跳轉(zhuǎn)指令BLXBX帶狀態(tài)切換的跳轉(zhuǎn)指令1BB{條件}目標(biāo)地址ARM地址,它的值由匯編器來計(jì)算(參考尋址方式中的相對(duì)尋址)24有符號(hào)擴(kuò)展為32位,表示的有效偏移為2632MBB;程序無條件跳轉(zhuǎn)到標(biāo)號(hào)Label;當(dāng)CPSR寄存器中的Z條件碼置位時(shí),程序跳轉(zhuǎn)到標(biāo)號(hào)Label處執(zhí)2BLBL{條件}目標(biāo)地址調(diào)用的一個(gè)基本但常用的。以下指令:BLLabel;當(dāng)程序無條件跳轉(zhuǎn)到標(biāo)號(hào)Label處執(zhí)行時(shí),同時(shí)將當(dāng)前的PC值保存到R143BLXBLX目標(biāo)地址換到Thumb該指令同時(shí)將PC的當(dāng)前內(nèi)容保存到寄存器R14當(dāng)子程序使用Thumb指令集而調(diào)用者使用ARM指令集時(shí)以通過BLX指令實(shí)現(xiàn)子程序的調(diào)用和處理器工作狀態(tài)的切換。同時(shí),子程序的返回可以通過將寄存器R14值到PC中來完成。4BXBX{條件}目標(biāo)地址BXARMThumb數(shù)據(jù)處理指CPSRCPSRMOVMVNCMPCMNTSTTEQADDADCSUBSBCRSBRSCANDORREORBIC1MOVMOV指令可完成從另一個(gè)寄存器、被移位的寄存器或?qū)⒁粋€(gè)立即數(shù)加載到目的寄存器。其中S選項(xiàng)決定指令的操作是否影響CPSR中條件標(biāo)志位的值,當(dāng)沒有S時(shí)指令不更新CPSR中條件標(biāo)志位的;將寄存器R0的值傳送到寄存器;將寄存器R14的值傳送到PC;將寄存器R0的值左移3位后傳送到2MVNCPSRSCPSR ;將立即數(shù)0取反傳送到寄存器R0中,完成后R0=-3CMPCMP{1條件標(biāo)志位的值。該指令進(jìn)行一次減法運(yùn)算,但不結(jié)果,只更改條件標(biāo)志位。標(biāo)志位表示的是操作數(shù)1與操作數(shù)2的關(guān)系(大、小、相等),例如,當(dāng)操作數(shù)1大于操作操作數(shù)2,則此后的有GT;將寄存器R1的值與寄存器R0的值相減,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志;將寄存器R1的值與立即數(shù)100相減,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志4CMNCMN{1CMN指令用于CPSR12,并根據(jù)結(jié)果更改條件標(biāo)志位。 ;將寄存器R1的值與寄存器R0的值相加,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志 ;將寄存器R1的值與立即數(shù)100相加,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志5TSTTST{1算結(jié)果更新CPSR中條件標(biāo)志位的值。操作數(shù)1是要測(cè)試的數(shù)據(jù),而操作數(shù)2是一個(gè)位掩碼,該指令 ;用于測(cè)試在寄存器R1中是否設(shè)置了最低位(%表示二進(jìn)制數(shù) ;將寄存器R1的值與立即數(shù)0xffe按位與,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志6TEQTEQ{1CPSR12 ;將寄存器R1的值與寄存器R2的值按位異或,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志7ADDADD{條件}{S12可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。 ;R0=R1+ ;R0=R1+ ;R0=R2+(R3<<8ADCADC{條件}{S1ADC指令用于把兩個(gè)操作數(shù)相加,再加上CPSR中的C條件標(biāo)志位的值,并將結(jié)果存放到目的寄存器中。它使用一個(gè)進(jìn)位標(biāo)志位,這樣就可以做比32位大的數(shù)的加法,注意記設(shè)置S后綴來更改進(jìn)位標(biāo)志。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)以下指令序列完成兩個(gè)128位數(shù)的加法,第一個(gè)數(shù)由高到低存放在寄存器R7~R4,第二個(gè)數(shù)由R11~R8R3~R0:ADDS ;加的ADCS 進(jìn)ADCS 進(jìn) ;加第,帶進(jìn)9SUBSUB{條件}{S1SUB指令用于把操作數(shù)1減去操作數(shù)2,并將結(jié)果存放到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存 ;R0=R1- ;R0=R1- ;R0=R2-(R3<<10、SBCSBC{條件}{S1SBC指令用于把操1減去操作數(shù)2,再減去CPSR中的C標(biāo)志位的反碼,并將結(jié)果存放到SUBS ;R0R1R2!C,并根據(jù)結(jié)果設(shè)置CPSR的進(jìn)位標(biāo)志11、RSBRSB{條件}{S1;=R2–;=256–;=(R3<<1)-12、RSCRSC{條件}{S1RSC指令用于把操2減去操作數(shù)1,再減去CPSR中的C標(biāo)志位的反碼,并將結(jié)果存放到 ;R0=R2–R1-13、ANDAND{條件}{S1個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。該指令常用于操作1的某些位。 ;該指令保持R0的0、1位,其余位14、ORRORR{條件}{S11的某些位。 設(shè)置R00、115、EOREOR{條件}{S11的某些位。 反轉(zhuǎn)R00、116、BICBIC{條件}{S1 清除R0中的位0、1、和3乘法指令與乘加指1必須是不同的寄存器。6 1MULCPSR1232位的有符號(hào)數(shù)或無 ;R0=R1×MULS ;R0R1R2,同時(shí)設(shè)置CPSR中的相關(guān)條件標(biāo)志2MLAMLA指令完成將操作數(shù)1與操作數(shù)2的乘法運(yùn)算,再將乘積加上操作數(shù)3,并把結(jié)果放置到目的32位的有符號(hào)數(shù)或無符號(hào)數(shù)。 ;R0=R1×R2+MLAS ;R0R1R2R3,同時(shí)設(shè)置CPSR中的相關(guān)條件標(biāo)志3SMULLSMULL{條件}{S}目的寄存器Low,High1SMULL指令完成將操作數(shù)1與操作數(shù)2的乘法運(yùn)算,并把結(jié)果的低32位放置到目的寄存器Low32位放置到目的寄存器HighCPSR中相應(yīng)的條件標(biāo)1232位的有符號(hào)數(shù)。SMULL ;R0(R2R3)的低32;R1(R2R3)的高324SMLALSMLAL{條件}{S}目的寄存器Low,High1SMLAL指令完成將操作數(shù)1操作數(shù)2的乘法并把結(jié)果32位同目的寄Low中的值相加后又放置到目的寄存器Low32High中的值相加后又放置到目232位的有符號(hào)數(shù)。LowSMLAL ;R0(R2R3)的低32;R1(R2R3)的高325UMULLUMULL{條件}{S}目的寄存器Low,High1UMULL指令完成將操作數(shù)1與操作數(shù)2的乘法運(yùn)算,并把結(jié)果的低32位放置到目的寄存器Low32位放置到目的寄存器HighCPSR中相應(yīng)的條件標(biāo)1232位的無符號(hào)數(shù)。UMULL ;R0(R2R3)的低32;R1(R2R3)的高326UMLALUMLAL{條件}{S}目的寄存器Low,High1UMLAL指令完成將操作數(shù)1操作數(shù)2的乘法并把結(jié)果32位同目的寄Low中的值相加后又放置到目的寄存器Low32High中的值相加后又放置到目232LowUMLAL ;R0(R2R3)的低32;R1(R2R3)的高32程序狀態(tài)寄存器指ARM微處理器支持程序狀態(tài)寄存器指令,用于在程序狀態(tài)寄存器和通用寄存器之間傳送數(shù)據(jù),程序狀態(tài)寄存器指令包括以下兩條:MRSMSR1MRSMRS{條件 MRS將程序狀態(tài)寄存器的內(nèi)容讀入通用寄存 ;傳送CPSR的內(nèi)容到R0 ;傳送SPSR的內(nèi)容到2MSRMSR{條件 32位[23:16s位[7:0]cMSR;傳送R0的內(nèi)容到;傳送R0的內(nèi)容到;傳送R0的內(nèi)容到SPSR,但僅僅修改CPSR加載/指ARM微處理器支持加載/指令用于在寄存器和器之間傳送數(shù)據(jù),加載指令用于將器中的數(shù)據(jù)傳送到寄存器,指令則完成相反的操作。常用的加載指令如下: 字?jǐn)?shù)據(jù)指 字節(jié)數(shù)據(jù)指 半字?jǐn)?shù)據(jù)指1、LDRLDR{條件}目的寄存器,<器地址LDR指令用于從器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。該指令通常用于從器中32位的字?jǐn)?shù)據(jù)到通用寄存器,然后對(duì)數(shù)據(jù)進(jìn)行處理。當(dāng)程序計(jì)數(shù)器PC作為目的寄存器時(shí), ;將器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0。 ;將器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0。 ;將器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0。 R0,[R1,R2]! ;將器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2寫入R1。 R0,[R1,#8] ;將器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址+8寫入R1 ;將器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2寫入R1。 ;將器地址為R1+R2×4的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。 ;將器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。2、LDRBLDR{條件}B目的寄存器,<器地址LDRB指令用于從器中將一個(gè)8位的字節(jié)數(shù)據(jù)傳送到目的寄存器中同時(shí)將寄存器的高24位。該指令通常用于從器中8位的字節(jié)數(shù)據(jù)到通用寄存器,然后對(duì)數(shù)據(jù)進(jìn)行處理。當(dāng)程LDRBR0,[R1] ;將器地址為R1的字節(jié)數(shù)據(jù)讀入寄存器R0,并將R0的高24位。LDRBR0,[R1,#8] ;將器地址為R1+8的字節(jié)數(shù)據(jù)讀入寄存器R0,并將R0的高24位清3、LDRHLDR{條件}H目的寄存器,<器地址LDRH ;將器地址為R1的半字?jǐn)?shù)據(jù)讀入寄存器R0,并將R0的高16位LDRH ;將器地址為R1+8的半字?jǐn)?shù)據(jù)讀入寄存器R0,并將R0的高16位零LDRHR0,[R1,R2] ;將器地址為R1+R2的半字?jǐn)?shù)據(jù)讀入寄存器R0,并將R0的高16位清4、STRSTR{條件}源寄存器,<器地址STR指令用于從源寄存器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到器中。該指令在程序設(shè)計(jì)中比較常LDR。 ;將R0中的字?jǐn)?shù)據(jù)寫入以R1為地址的器中,并將新地址R1+8寫 ;將R0中的字?jǐn)?shù)據(jù)寫入以R1+8為地址的器中5、STRBSTR{條件}B源寄存器,<器地址STRB指令用于從源寄存器中將一個(gè)8位的字節(jié)數(shù)據(jù)傳送到器中。該字節(jié)數(shù)據(jù)為源寄存器中8STRB ;將寄存器R0中的字節(jié)數(shù)據(jù)寫入以R1為地址的器中STRB ;將寄存器R0中的字節(jié)數(shù)據(jù)寫入以R1+8為地址的器中6、STRHSTR{條件}H源寄存器,<器地址STRH指令用于從源寄存器中將一個(gè)16位的半字?jǐn)?shù)據(jù)傳送到器中。該半字?jǐn)?shù)據(jù)為源寄存器16STRH ;將寄存器R0中的半字?jǐn)?shù)據(jù)寫入以R1為地址的器中STRH ;將寄存器R0中的半字?jǐn)?shù)據(jù)寫入以R1+8為地址的器中批量數(shù)據(jù)加載/指ARM微處理器所支持批量數(shù)據(jù)加載/指令可以一次在一片連續(xù)的器單元和多個(gè)寄存器之間傳送數(shù)據(jù),批量加載指令用于將一片連續(xù)的器中的數(shù)據(jù)傳送到多個(gè)寄存器,批量數(shù)據(jù)指令則完成相反的操作。常用的加載指令如下:LDMSTM批量數(shù)據(jù)指IA每次傳送后地址加1;IB每次傳送前地址加1;DA每次傳送后地址減1;DB每次傳送前地址減1;FD滿遞減堆棧;ED空遞減堆棧;FA滿遞增堆棧;EA空遞增堆棧;{∧}為可選后綴,當(dāng)指令為L(zhǎng)DM且寄存器列表中包含R15,選用該后綴時(shí)表示:除了正常的數(shù)據(jù)STMFDR13!,{R0,R4-R12,LR} ;將寄存器列表中的寄存器(R0,R4到R12,LR)存入堆LDMFDR13!,{R0,R4- ;將堆棧內(nèi)容恢復(fù)到寄存器(R0,R4到R12,LR)數(shù)據(jù)交換指ARM微處理器所支持?jǐn)?shù)據(jù)交換指令能在器和寄存器之間交換數(shù)據(jù)。數(shù)據(jù)交換指令有如下 1、SWPSWP{1,中的字?jǐn)?shù)據(jù)傳送到源寄存器2所指向的器中。顯然,當(dāng)源寄存器1和目的寄存器為同一個(gè)寄存器時(shí),指令交換該寄存器和器的內(nèi)容。 ;將R2所指向的器中的字?jǐn)?shù)據(jù)傳送到R0,同時(shí)將R1中的字?jǐn)?shù)據(jù)傳送到R2所指向的單元。 ;該指令完成將R1所指向的器中的字?jǐn)?shù)據(jù)與R0中的字?jǐn)?shù)據(jù)交換2、SWPBSWP{條件}B1SWPB指令用于將源寄存器2所指向的器中的字節(jié)數(shù)據(jù)傳送到目的寄存器中,目的寄存器的高24,同時(shí)將源寄存器1中的字節(jié)數(shù)據(jù)傳送到源寄存器2所指向的器中。顯然,當(dāng)源寄存器1和目的寄存器為同一個(gè)寄存器時(shí),指令交換該寄存器和器的內(nèi)容。SWPBR0,R1,[R2] ;將R2所指向的器中的字節(jié)數(shù)據(jù)傳送到R0,R0的高24位,同時(shí)將R1中的低8位數(shù)據(jù)傳送到R2所指向的單元。SWPBR0,R0,[R1] ;該指令完成將R1所指向的器中的字節(jié)數(shù)據(jù)與R0中的低8位數(shù)移位指令(操作ARM(BarrelShifter),支持?jǐn)?shù)據(jù)的各種移位操作,移位操作在ARM指令集中單獨(dú)的指令使用,它只能作為指令格式中是一個(gè)字段,在匯編語(yǔ)言中表示為指6ASL和LSL 通用寄存器,LSL(或ASL) R0,R1, ;將R1中的內(nèi)容左移兩位后傳送到R0中2、LSR通用寄存器,LSRLSR R0,R1, ;將R1中的內(nèi)容右移兩位后傳送到R03、ASR通用寄存器,ASR31位的值來填充。其中,操作數(shù)可以是通用寄存器,也可以是立即數(shù)(0~31)。 R0,R1,ASR#2 ;將R1中的內(nèi)容右移兩位后傳送到R0中,左端用第31位的值來填4、ROR通用寄存器,RORROR32位的循環(huán)右移操作時(shí),通用寄存器中的值不改變。 R0,R1, ;將R1中的內(nèi)容循環(huán)右移兩位后傳送到R0中5、RRX通用寄存器,RRXRRX可完成對(duì)通用寄存器中的內(nèi)容進(jìn)行帶擴(kuò)展的循環(huán)右移的操作,按操作數(shù)所指定的數(shù)量向右C來填充。其中,操作數(shù)可以是通用寄存器,也可以是立即數(shù)(0~ R0,R1, ;將R1中的內(nèi)容進(jìn)行帶擴(kuò)展的循環(huán)右移兩位后傳送到R0中協(xié)處理器指協(xié)處理器只執(zhí)行針對(duì)自身的協(xié)處理指令,忽略ARM處理器和其他協(xié)處理器的指令。ARMARMARM協(xié)處理器的數(shù)據(jù)處理操作,以及在ARM處理器的寄存器和協(xié)處理器的寄存器之間傳送數(shù)據(jù)和在ARM協(xié)處理器的寄存器和器之間傳送數(shù)據(jù)。ARM5條:CDP 協(xié)處理器數(shù)據(jù)指 1、CDP2。CDP指令用于ARM處理器通知ARM協(xié)處理器執(zhí)行特定的操作,若協(xié)處理器不能成功完成特定的操作,則產(chǎn)生未定義指令異常。其中協(xié)處理器操作碼1和協(xié)處理器操作碼2為協(xié)處理器將要執(zhí)行的操作,目的寄存器和源寄存器均為協(xié)處理器的寄存器,指令不涉及ARM處理器的寄存器和器。 ;該指令完成協(xié)處理器P3的初始2、LDCLDC指令用于將源寄存器所指向的器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中,若協(xié)處理器不能成 ;將ARM處理器的寄

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論