- 從零開始學(xué)ARM
- 彭丹 周海濤編著
- 550字
- 2025-01-16 17:59:02
3.1 ARM指令格式
ARM指令助記符表示如下。
<opcode> {<cond>} {S} <Rd>, <Rn>, <shift_op2>
每個(gè)域的含義如下。
(1)<opcode>:操作碼域。作為指令編碼的助記符。
(2){<cond>}:條件碼域,指令允許執(zhí)行的條件編碼,大括號(hào)表示此項(xiàng)可缺省。
ARM指令的一個(gè)重要特點(diǎn)是其可以條件執(zhí)行,每條ARM指令的條件碼域包含4位條件碼,共16種。絕大多數(shù)指令根據(jù)CPSR中條件碼的狀態(tài)和條件碼域的設(shè)置條件執(zhí)行。當(dāng)執(zhí)行條件滿足時(shí),指令被執(zhí)行,否則被忽略。ARM指令條件碼如表3-1所示。
表3-1 ARM指令條件碼

續(xù)表

每種條件碼可用兩個(gè)字符表示,這兩個(gè)字符可以作為助記符后綴添加在指令的后面和指令同時(shí)使用。
例如,跳轉(zhuǎn)指令“b”可以加上后綴“eq”變?yōu)椤癰eq”,表示“相等則跳轉(zhuǎn)”,即當(dāng)CPSR中的Z標(biāo)志位置位時(shí)發(fā)生跳轉(zhuǎn)。
(3){S}:條件碼設(shè)置域。這是一個(gè)可選項(xiàng),當(dāng)設(shè)置該域時(shí),指令執(zhí)行的結(jié)果將會(huì)影響程序狀態(tài)寄存器CPSR中相應(yīng)的狀態(tài)標(biāo)志。示例如下。
add r0,r1,r2;將R1與R2的和存放到R0中,不影響程序狀態(tài)寄存器。 adds r0,r1,r2;執(zhí)行加法,影響程序狀態(tài)寄存器。
指令中比較特殊的是指令CMP,它不需要加“s”后綴就默認(rèn)根據(jù)計(jì)算結(jié)果更改CPRS。
(4)<Rd>:目的操作數(shù)。ARM指令中的目的操作數(shù)總是一個(gè)寄存器。即使<Rd>與第一操作數(shù)寄存器<Rn>相同,此處也必須要指明,不能缺省。
(5)<Rn>:第一操作數(shù)。ARM指令中的第一操作數(shù)也必須是個(gè)寄存器。
(6)<shift_op2>:第二操作數(shù)。第二操作數(shù)可以是寄存器、內(nèi)存存儲(chǔ)單元或立即數(shù)。
- 大前端三劍客:Vue+React+Flutter
- 嵌入式系統(tǒng)開發(fā)之道:菜鳥成長日志與項(xiàng)目經(jīng)理的私房菜
- DevOps:企業(yè)級(jí)CI/CD實(shí)戰(zhàn)
- 計(jì)算機(jī)軟件技術(shù)基礎(chǔ)
- 手機(jī)軟件測試最佳實(shí)踐
- 搜索引擎與程序化廣告:原理、設(shè)計(jì)與實(shí)戰(zhàn)
- 軟件秘笈:設(shè)計(jì)模式那點(diǎn)事
- 軟件開發(fā)大講堂·從入門到精通-第一輯(套裝共5冊(cè))
- 現(xiàn)代軟件工程
- 項(xiàng)目實(shí)踐精解:基于EJB 3.0和Web Services的Java應(yīng)用開發(fā)
- 持續(xù)交付2.0:業(yè)務(wù)引領(lǐng)的DevOps精要(增訂本)
- Android驅(qū)動(dòng)開發(fā)與移植實(shí)戰(zhàn)詳解
- MATLAB之幻方
- 深入淺出系統(tǒng)虛擬化:原理與實(shí)踐
- MLOps實(shí)踐:機(jī)器學(xué)習(xí)從開發(fā)到生產(chǎn)