色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM匯編指令集之四——數(shù)據(jù)處理指令

          ARM匯編指令集之四——數(shù)據(jù)處理指令

          作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
          數(shù)據(jù)處理指令可分為數(shù)據(jù)傳送指令、算術(shù)邏輯運(yùn)算指令和比較指令等。

          數(shù)據(jù)傳送指令用于在寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)的雙向傳輸。

          本文引用地址:http://cafeforensic.com/article/201611/317600.htm

          算術(shù)邏輯運(yùn)算指令完成常用的算術(shù)與邏輯運(yùn)算,該類指令不但將運(yùn)算結(jié)果保存在目的寄存器中,同時(shí)更新CPSR中相應(yīng)條件標(biāo)志位。

          比較指令不保存運(yùn)算結(jié)果,只更新CPSR中相應(yīng)的條件標(biāo)志位。

          數(shù)據(jù)處理指令共以下16條。

          1、MOV指令

          MOV指令的格式為:

          MOV{條件}{S}目的寄存器,源操作數(shù)

          MOV指令可完成從另一個(gè)寄存器、被移位的寄存器或?qū)⒁粋€(gè)立即數(shù)加載到目的寄存器。

          其中S選項(xiàng)決定指令的操作是否影響CPSR中條件標(biāo)志位的值,當(dāng)沒有S時(shí)指令不更新CPSR中條件標(biāo)志位的值。

          指令示例:

          MOV R1,R0;將寄存器R0的值傳送到寄存器R1

          MOV PC,R14;將寄存器R14的值傳送到PC,常用于子程序返回

          MOV R1,R0,LSL#3;將寄存器R0的值左移3位后傳送到R1

          2、MVN指令

          MVN指令的格式為:

          MVN{條件}{S}目的寄存器,源操作數(shù)

          MVN指令可完成從另一個(gè)寄存器、被移位的寄存器、或?qū)⒁粋€(gè)立即數(shù)加載到目的寄存器。與MOV指令不同之處是在傳送之前按位被取反了,即把一個(gè)被取反的值傳送到目的寄存器中。

          其中S決定指令的操作是否影響CPSR中條件標(biāo)志位的值,當(dāng)沒有S時(shí)指令不更新CPSR中條件標(biāo)志位的值。

          指令示例:

          MVNR0,#0;將立即數(shù)0取反傳送到寄存器R0中,完成后R0=-1

          3、CMP指令

          CMP指令的格式為:

          CMP{條件}操作數(shù)1,操作數(shù)2

          CMP指令用于把一個(gè)寄存器的內(nèi)容和另一個(gè)寄存器的內(nèi)容或立即數(shù)進(jìn)行比較,同時(shí)更新CPSR中條件標(biāo)志位的值。

          該指令進(jìn)行一次減法運(yùn)算,但不存儲(chǔ)結(jié)果,只更改條件標(biāo)志位。標(biāo)志位表示的是操作數(shù)1與操作數(shù)2的關(guān)系(大、小、相等),例如,當(dāng)操作數(shù)1大于操作操作數(shù)2,則此后的有GT后綴的指令將可以執(zhí)行。

          指令示例:

          CMPR1,R0;將寄存器R1的值與寄存器R0的值相減,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位

          CMP R1,#100;將寄存器R1的值與立即數(shù)100相減,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位

          4、CMN指令

          CMN指令的格式為:

          CMN{條件}操作數(shù)1,操作數(shù)2

          CMN指令用于把一個(gè)寄存器的內(nèi)容和另一個(gè)寄存器的內(nèi)容或立即數(shù)取反后進(jìn)行比較,同時(shí)更新CPSR中條件標(biāo)志位的值。該指令實(shí)際完成操作數(shù)1和操作數(shù)2相加,并根據(jù)結(jié)果更改條件標(biāo)志位。

          指令示例:

          CMNR1,R0;將寄存器R1的值與寄存器R0的值相加,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位

          CMN R1,#100;將寄存器R1的值與立即數(shù)100相加,并根據(jù)結(jié)果設(shè)置

          5、TST指令

          TST指令的格式為:

          TST{條件}操作數(shù)1,操作數(shù)2

          TST指令用于把一個(gè)寄存器的內(nèi)容和另一個(gè)寄存器的內(nèi)容或立即數(shù)進(jìn)行按位的與運(yùn)算,并根據(jù)運(yùn)算結(jié)果更新CPSR中條件標(biāo)志位的值。

          操作數(shù)1是要測(cè)試的數(shù)據(jù),而操作數(shù)2是一個(gè)位掩碼,該指令一般用來(lái)檢測(cè)是否設(shè)置了特定的位。

          指令示例:

          TSTR1,#%1;用于測(cè)試在寄存器R1中是否設(shè)置了最低位(%表示二進(jìn)制數(shù)

          TST R1,#0xffe;將寄存器R1的值與立即數(shù)0xffe按位與,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位

          6、TEQ指令

          TEQ指令的格式為:

          TEQ{條件}操作數(shù)1,操作數(shù)2

          TEQ指令用于把一個(gè)寄存器的內(nèi)容和另一個(gè)寄存器的內(nèi)容或立即數(shù)進(jìn)行按位的異或運(yùn)算,并根據(jù)運(yùn)算結(jié)果更新CPSR中條件標(biāo)志位的值。

          該指令通常用于比較操作數(shù)1和操作數(shù)2是否相等。

          指令示例:

          TEQR1,R2;將寄存器R1的值與寄存器R2的值按位異或,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位

          7、ADD指令

          ADD指令的格式為:

          ADD{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          ADD指令用于把兩個(gè)操作數(shù)相加,并將結(jié)果存放到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。

          指令示例:

          ADDR0,R1,R2;R0 = R1 + R2

          ADDR0,R1,#256;R0 = R1 + 256

          ADDR0,R2,R3,LSL#1;R0 = R2 + (R3 << 1)

          8、ADC指令

          ADC指令的格式為:

          ADC{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          ADC指令用于把兩個(gè)操作數(shù)相加,再加上CPSR中的C條件標(biāo)志位的值,并將結(jié)果存放到目的寄存器中。它使用一個(gè)進(jìn)位標(biāo)志位,這樣就可以做比32位大的數(shù)的加法,注意不要忘記設(shè)置S后綴來(lái)更改進(jìn)位標(biāo)志。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。

          以下指令序列完成兩個(gè)128位數(shù)的加法,第一個(gè)數(shù)由高到低存放在寄存器R7~R4,第二個(gè)數(shù)由高到低存放在寄存器R11~R8,運(yùn)算結(jié)果由高到低存放在寄存器R3~R0:

          ADDSR0,R4,R8;加低端的字

          ADCSR1,R5,R9;加第二個(gè)字,帶進(jìn)位

          ADCSR2,R6,R10;加第三個(gè)字,帶進(jìn)位

          ADCR3,R7,R11;加第四個(gè)字,帶進(jìn)位

          9、SUB指令

          SUB指令的格式為:

          SUB{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          SUB指令用于把操作數(shù)1減去操作數(shù)2,并將結(jié)果存放到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。該指令可用于有符號(hào)數(shù)或無(wú)符號(hào)數(shù)的減法運(yùn)算。

          指令示例:

          SUBR0,R1,R2;R0 = R1 - R2

          SUBR0,R1,#256;R0 = R1 - 256

          SUBR0,R2,R3,LSL#1;R0 = R2 - (R3 << 1)

          10、SBC指令

          SBC指令的格式為:

          SBC{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          SBC指令用于把操作數(shù)1減去操作數(shù)2,再減去CPSR中的C條件標(biāo)志位的反碼,并將結(jié)果存放到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。該指令使用進(jìn)位標(biāo)志來(lái)表示借位,這樣就可以做大于32位的減法,注意不要忘記設(shè)置S后綴來(lái)更改進(jìn)位標(biāo)志。該指令可用于有符號(hào)數(shù)或無(wú)符號(hào)數(shù)的減法運(yùn)算。

          指令示例:

          SBCSR0,R1,R2;R0 = R1 - R2 -!C,并根據(jù)結(jié)果設(shè)置CPSR的進(jìn)位標(biāo)志位

          11、RSB指令

          RSUB指令的格式為:

          RSB{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          RSB指令稱為逆向減法指令,用于把操作數(shù)2減去操作數(shù)1,并將結(jié)果存放到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。該指令可用于有符號(hào)數(shù)或無(wú)符號(hào)數(shù)的減法運(yùn)算。

          指令示例:

          RSB R0,R1,R2;R0 = R2–R1

          RSB R0,R1,#256;R0 = 256–R1

          RSB R0,R2,R3,LSL#1;R0 = (R3 << 1) - R2

          12、RSC指令

          RSC指令的格式為:

          RSC{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          RSC指令用于把操作數(shù)2減去操作數(shù)1,再減去CPSR中的C條件標(biāo)志位的反碼,并將結(jié)果存放到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。該指令使用進(jìn)位標(biāo)志來(lái)表示借位,這樣就可以做大于32位的減法,注意不要忘記設(shè)置S后綴來(lái)更改進(jìn)位標(biāo)志。該指令可用于有符號(hào)數(shù)或無(wú)符號(hào)數(shù)的減法運(yùn)算。

          指令示例:

          RSCR0,R1,R2;R0 = R2–R1 -!C

          13、AND指令

          AND指令的格式為:

          AND{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          AND指令用于在兩個(gè)操作數(shù)上進(jìn)行邏輯與運(yùn)算,并把結(jié)果放置到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。該指令常用于屏蔽操作數(shù)1的某些位。

          指令示例:

          AND R0,R0,#3;該指令保持R0的0、1位,其余位清零。

          14、ORR指令

          ORR指令的格式為:

          ORR{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          ORR指令用于在兩個(gè)操作數(shù)上進(jìn)行邏輯或運(yùn)算,并把結(jié)果放置到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。該指令常用于設(shè)置操作數(shù)1的某些位。

          指令示例:

          ORR R0,R0,#3;該指令設(shè)置R0的0、1位,其余位保持不變。

          15、EOR指令

          EOR指令的格式為:

          EOR{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          EOR指令用于在兩個(gè)操作數(shù)上進(jìn)行邏輯異或運(yùn)算,并把結(jié)果放置到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。該指令常用于反轉(zhuǎn)操作數(shù)1的某些位。

          指令示例:

          EOR R0,R0,#3;該指令反轉(zhuǎn)R0的0、1位,其余位保持不變。

          16、BIC指令

          BIC指令的格式為:

          BIC{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

          BIC指令用于清除操作數(shù)1的某些位,并把結(jié)果放置到目的寄存器中。操作數(shù)1應(yīng)是一個(gè)寄存器,操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。操作數(shù)2為32位的掩碼,如果在掩碼中設(shè)置了某一位,則清除這一位。未設(shè)置的掩碼位保持不變。

          指令示例:

          BIC R0,R0,#%1011;該指令清除R0中的位0、1、和3,其余的位保持不變。



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉