日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ARM】数据操作指令(下)

發(fā)布時(shí)間:2024/4/24 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ARM】数据操作指令(下) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 數(shù)據(jù)操作指令概述
    • 02. RSC指令
    • 03. TST測試指令
    • 04. TEQ指令
    • 05. CMP 指令
    • 06. CMN 指令
    • 07. ORR 指令
    • 08. BIC位清零指令
    • 09. 附錄

01. 數(shù)據(jù)操作指令概述

? 數(shù)據(jù)操作指令是指對存放在寄存器中的數(shù)據(jù)進(jìn)行操作的指令。主要包括數(shù)據(jù)傳送指令、算術(shù)指令、邏輯指令、比較與測試指令及乘法指令。

? 如果在數(shù)據(jù)處理指令前使用 S 前綴,指令的執(zhí)行結(jié)果將會影響 CPSR 中的標(biāo)志位。數(shù)據(jù)處理指令如表 3-6 所示。

02. RSC指令

RSC(Reverse Subtract with Carry)指令從寄存器 shifter_operand 中減去 Rn 表示的數(shù)值,再減去寄存器 CPSR 中 C 條件標(biāo)志位的反碼[NOT(Carry Flag)],并將結(jié)果保存到目標(biāo)寄存器 Rd 中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置 CPSR 中相應(yīng)的標(biāo)志位。

2.1 指令的語法格式

RSC{<cond>}{S} <Rd>,<Rn>,<shifter_operand>

2.2 應(yīng)用示例一

@ 下面的程序使用 RSC 指令實(shí)現(xiàn)求 64 位數(shù)值的負(fù)數(shù)。 RSBS R2,R0,#0 RSC R3,R1,#0

03. TST測試指令

TST(Test)測試指令用于將一個(gè)寄存器的值和一個(gè)算術(shù)值進(jìn)行比較。條件標(biāo)志位根據(jù)兩個(gè)操作數(shù)做“邏輯與”后的結(jié)果設(shè)置。

3.1 指令的語法格式

TST{<cond>} <Rn>,<shifter_operand>

3.2 應(yīng)用示例一

TST 指令類似于 CMP 指令,不產(chǎn)生放置到目的寄存器中的結(jié)果。而是在給出的兩個(gè)操作數(shù)上進(jìn)行操作并把結(jié)果反映到狀態(tài)標(biāo)志上。使用 TST 指令來檢查是否設(shè)置了特定的位。操作數(shù) 1 是要測試的數(shù)據(jù)字,而操作數(shù) 2 是一個(gè)位掩碼。經(jīng)過測試后,如果匹配則設(shè)置 Zero標(biāo)志,否則清除它。與 CMP 指令一樣,該指令不需要指定 S 后綴。下面的指令測試在 R0 中是否設(shè)置了位 0。

TST R0, #1

04. TEQ指令

TEQ(Test Equivalence)指令用于將一個(gè)寄存器的值和一個(gè)算術(shù)值做比較。條件標(biāo)志位根據(jù)兩個(gè)操作數(shù)做“邏輯異或”后的結(jié)果設(shè)置。以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。

4.1 指令的語法格式:

TEQ{<cond>} <Rn>,<shifter_operand>

4.2 應(yīng)用示例一

@ 下面的指令是比較 R0 和 R1 是否相等,該指令不影響 CPSR 中的 V 位和 C 位。 TEQ R0,R1

TST 指令與 EORS 指令的區(qū)別在于 TST 指令不保存運(yùn)算結(jié)果。使用 TEQ 進(jìn)行相等測試,常與 EQ 和 NE 條件碼配合使用,當(dāng)兩個(gè)數(shù)據(jù)相等時(shí),條件碼 EQ 有效;否則條件碼NE 有效。

05. CMP 指令

CMP(Compare)指令使用寄存器 Rn 的值減去 operand2 的值,根據(jù)操作的結(jié)果更新CPSR 中相應(yīng)的條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。

CMP 指令允許把一個(gè)寄存器的內(nèi)容與另一個(gè)寄存器的內(nèi)容或立即值進(jìn)行比較,更改狀態(tài)標(biāo)志來允許進(jìn)行條件執(zhí)行。它進(jìn)行一次減法,但不存儲結(jié)果,而是正確地更改標(biāo)志位。標(biāo)志位表示的是操作數(shù) 1 與操作數(shù) 2 比較的結(jié)果(其值可能為大于、小于、相等)。如果操作數(shù) 1 大于操作數(shù) 2,則此后的有 GT 后綴的指令將可以執(zhí)行。顯然,CMP 不需要顯式地指定 S 后綴來更改狀態(tài)標(biāo)志。

5.1 指令語法格式

CMP{<cond>} <Rn>,<shifter_operand>

5.2 應(yīng)用示例一

@ 比較 R1 和立即數(shù) 10 并設(shè)置相關(guān)的標(biāo)志位。 CMP R1,#10

5.3 應(yīng)用示例二

@ 比較寄存器 R1 和 R2 中的值并設(shè)置相關(guān)的標(biāo)志位。 CMP R1,R2

通過上面的例子可以看出,CMP 指令與 SUBS 指令的區(qū)別在于 CMP 指令不保存運(yùn)算結(jié)果,在進(jìn)行兩個(gè)數(shù)據(jù)大小判斷時(shí),常用 CMP 指令及相應(yīng)的條件碼來進(jìn)行操作。

06. CMN 指令

CMN(Compare Negative)指令使用寄存器 Rn 的值減去 operand2 的負(fù)數(shù)值(加上operand2),根據(jù)操作的結(jié)果更新 CPSR 中相應(yīng)的條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。

6.1 指令的語法格式

CMN{<cond>} <Rn>,<shifter_operand>

6.2 應(yīng)用示例一

CMN 指令將寄存器 Rn 中的值加上 shifter_operand 表示的數(shù)值,根據(jù)加法的結(jié)果設(shè)置CPSR 中相應(yīng)的條件標(biāo)志位。寄存器 Rn 中的值加上 shifter_operand 的操作結(jié)果對 CPSR 中條件標(biāo)志位的影響,與寄存器 Rn 中的值減去 shifter_operand 的操作結(jié)果的相反數(shù)對 CPSR中條件標(biāo)志位的影響有細(xì)微差別。當(dāng)?shù)?2 個(gè)操作數(shù)為 0 或者為 0x80000000 時(shí),兩者結(jié)果不同。比如下面兩條指令。

@ 第 1 條指令使標(biāo)志位 C 值為 1,第 2 條指令使標(biāo)志位 C 值為 0。 CMP Rn,#0 CMN Rn,#0

6.3 應(yīng)用示例二

@ 下面的指令使 R0 值加 1,判斷 R0 是否為 1 的補(bǔ)碼,若是,則 Z 置位。 CMN R0,#1

07. ORR 指令

ORR(Logical OR)為邏輯或操作指令,它將第 2 個(gè)源操作數(shù) shifter_operand 的值與寄存器 Rn 的值按位做“邏輯或”操作,結(jié)果保存到 Rd 中。

7.1 指令的語法格式

ORR{<cond>}{S} <Rd>,<Rn>,<shifter_operand>

7.2 應(yīng)用示例一

@ 設(shè)置 R0 中位 0 和 1。 ORR R0, R0, #3

7.3 應(yīng)用示例二

@ 將 R0 的低 4 位置 1。 ORR R0,R0,#0x0F

7.2 應(yīng)用示例一

@ 使用 ORR 指令將 R2 的高 8 位數(shù)據(jù)移入到 R3 的低 8 位中。 MOV R1,R2,LSR #4 ORR R3,R1,R3,LSL #8

08. BIC位清零指令

BIC(Bit Clear)位清零指令,將寄存器 Rn 的值與第 2 個(gè)源操作數(shù) shifter_operand 的值的反碼按位做“邏輯與”操作,結(jié)果保存到 Rd 中。

8.1 指令的語法格式

BIC{<cond>}{S} <Rd>,<Rn>,<shifter_operand>

8.2 應(yīng)用示例一

@ 清除 R0 中的位 0、1 和 3,保持其余的不變。 BIC R0, R0, #0b1011

8.3 應(yīng)用示例二

@ 將 R3 的反碼和 R2 做“邏輯與”操作,結(jié)果保存到 R1 中。 BIC R1,R2,R3

09. 附錄

11.1 ARM Architecture Reference Manual

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的【ARM】数据操作指令(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。