娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

ARM詳細指令集

發布者:學海飄香最新更新時間:2019-12-04 來源: eefocus關鍵字:ARM  指令集  操作數 手機看文章 掃描二維碼
隨時隨地手機看文章

算術和邏輯指令

ADC : 帶進位的加法


(Addition with Carry)


ADC{條件}{S}  , ,


                dest = op_1 + op_2 + carry

ADC 將把兩個操作數加起來,并把結果放置到目的寄存器中。它使用一個進位標志位,這樣就可以做比 32 位大的加法。下列例子將加兩個 128 位的數。

128 位結果: 寄存器 0、1、2、和 3

第一個 128 位數: 寄存器 4、5、6、和 7

第二個 128 位數: 寄存器 8、9、10、和 11。


ADDS    R0, R4, R8              ; 加低端的字

  ADCS    R1, R5, R9              ; 加下一個字,帶進位

  ADCS    R2, R6, R10             ; 加第三個字,帶進位

  ADCS    R3, R7, R11             ; 加高端的字,帶進位

如果如果要做這樣的加法,不要忘記設置 S 后綴來更改進位標志。


 


ADD : 加法


(Addition)


ADD{條件}{S}  , ,


                dest = op_1 + op_2

ADD 將把兩個操作數加起來,把結果放置到目的寄存器中。操作數 1 是一個寄存器,操作數 2 可以是一個寄存器,被移位的寄存器,或一個立即值:


ADD     R0, R1, R2              ; R0 = R1 + R2

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

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

加法可以在有符號和無符號數上進行。


 



AND : 邏輯與


(logical AND)


AND{條件}{S}  , ,


                dest = op_1 AND op_2

AND 將在兩個操作數上進行邏輯與,把結果放置到目的寄存器中;對屏蔽你要在上面工作的位很有用。 操作數 1 是一個寄存器,操作數 2 可以是一個寄存器,被移位的寄存器,或一個立即值:


AND     R0, R0, #3              ; R0 = 保持 R0 的位 0 和 1,丟棄其余的位。

AND 的真值表(二者都是 1 則結果為 1):


Op_1   Op_2   結果


  0      0      0

  0      1      0

  1      0      0

  1      1      1

 


BIC : 位清除


(Bit Clear)


BIC{條件}{S}  , ,


                dest = op_1 AND (!op_2)

BIC 是在一個字中清除位的一種方法,與 OR 位設置是相反的操作。操作數 2 是一個 32 位位掩碼(mask)。如果如果在掩碼中設置了某一位,則清除這一位。未設置的掩碼位指示此位保持不變。


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

BIC 真值表 :


Op_1   Op_2   結果


  0      0      0

  0      1      0

  1      0      1

  1      1      0

譯注:邏輯表達式為 Op_1 AND NOT Op_2

 



EOR : 邏輯異或


(logical Exclusive OR)


EOR{條件}{S}  , ,


                dest = op_1 EOR op_2

EOR 將在兩個操作數上進行邏輯異或,把結果放置到目的寄存器中;對反轉特定的位有用。操作數 1 是一個寄存器,操作數 2 可以是一個寄存器,被移位的寄存器,或一個立即值:


EOR     R0, R0, #3              ; 反轉 R0 中的位 0 和 1

EOR 真值表(二者不同則結果為 1):


Op_1   Op_2   結果


  0      0      0

  0      1      1

  1      0      1

  1      1      0

 


MOV : 傳送


(Move)


MOV{條件}{S}  ,


                dest = op_1

MOV 從另一個寄存器、被移位的寄存器、或一個立即值裝載一個值到目的寄存器。你可以指定相同的寄存器來實現 NOP 指令的效果,你還可以專門移位一個寄存器:


MOV     R0, R0                  ; R0 = R0... NOP 指令


  MOV     R0, R0, LSL#3           ; R0 = R0 * 8

如果 R15 是目的寄存器,將修改程序計數器或標志。這用于返回到調用代碼,方法是把連接寄存器的內容傳送到 R15:


MOV     PC, R14                 ; 退出到調用者


  MOVS    PC, R14                 ; 退出到調用者并恢復標志位

                                    (不遵從 32-bit 體系)

 


MVN : 傳送取反的值


(Move Negative)


MVN{條件}{S}  ,


                dest = !op_1

MVN 從另一個寄存器、被移位的寄存器、或一個立即值裝載一個值到目的寄存器。不同之處是在傳送之前位被反轉了,所以把一個被取反的值傳送到一個寄存器中。這是邏輯非操作而不是算術操作,這個取反的值加 1 才是它的取負的值:


MVN     R0, #4                  ; R0 = -5


  MVN     R0, #0                  ; R0 = -1

 


ORR : 邏輯或


(logical OR)


ORR{條件}{S}  , ,


                dest = op_1 OR op_2

OR 將在兩個操作數上進行邏輯或,把結果放置到目的寄存器中;對設置特定的位有用。操作數 1 是一個寄存器,操作數 2 可以是一個寄存器,被移位的寄存器,或一個立即值:


ORR     R0, R0, #3              ; 設置 R0 中位 0 和 1

OR 真值表(二者中存在 1 則結果為 1):


Op_1   Op_2   結果


  0      0      0

  0      1      1

  1      0      1

  1      1      1

 


RSB : 反向減法


(Reverse Subtraction)


RSB{條件}{S}  , ,


                dest = op_2 - op_1

SUB 用操作數 two 減去操作數 one,把結果放置到目的寄存器中。操作數 1 是一個寄存器,操作數 2 可以是一個寄存器,被移位的寄存器,或一個立即值:


RSB     R0, R1, R2              ; R0 = R2 - R1

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

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

反向減法可以在有符號或無符號數上進行。


 



RSC : 帶借位的反向減法


(Reverse Subtraction with Carry)


RSC{條件}{S}  , ,


                dest = op_2 - op_1 - !carry

同于 SBC,但倒換了兩個操作數的前后位置。


 



SBC : 帶借位的減法


(Subtraction with Carry)


SBC{條件}{S}  , ,


                dest = op_1 - op_2 - !carry

SBC 做兩個操作數的減法,把結果放置到目的寄存器中。它使用進位標志來表示借位,這樣就可以做大于 32 位的減法。SUB 和 SBC 生成進位標志的方式不同于常規,如果需要借位則清除進位標志。所以,指令要對進位標志進行一個非操作 - 在指令執行期間自動的反轉此位。


 



SUB : 減法


(Subtraction)


SUB{條件}{S}  , ,


                dest = op_1 - op_2

SUB 用操作數 one 減去操作數 two,把結果放置到目的寄存器中。操作數 1 是一個寄存器,操作數 2 可以是一個寄存器,被移位的寄存器,或一個立即值:


SUB     R0, R1, R2              ; R0 = R1 - R2

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

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

減法可以在有符號和無符號數上進行。


移位指令

       ARM 處理器組建了可以與數據處理指令(ADC、ADD、AND、BIC、CMN、CMP、EOR、MOV、MVN、ORR、RSB、SBC、SUB、TEQ、TST)一起使用的桶式移位器(barrel shifter)。你還可以使用桶式移位器影響在 LDR/STR 操作中的變址值。


譯注:移位操作在 ARM 指令集中不作為單獨的指令使用,它是指令格式中是一個字段,在匯編語言中表示為指令中的選項。如果數據處理指令的第二個操作數或者單一數據傳送指令中的變址是寄存器,則可以對它進行各種移位操作。如果數據處理指令的第二個操作數是立即值,在指令中用 8 位立即值和 4 位循環移位來表示它,所以對大于 255 的立即值,匯編器嘗試通過在指令中設置循環移位數量來表示它,如果不能表示則生成一個錯誤。在邏輯類指令中,邏輯運算指令由指令中 S 位的設置或清除來確定是否影響進位標志,而比較指令的 S 位總是設置的。在單一數據傳送指令中指定移位的數量只能用立即值而不能用寄存器。


下面是給不同的移位類型的六個助記符:


LSL  邏輯左移

  ASL  算術左移

  LSR  邏輯右移

  ASR  算術右移

  ROR  循環右移

  RRX  帶擴展的循環右移

ASL 和 LSL 是等同的,可以自由互換。


你可以用一個立即值(從 0 到 31)指定移位數量,或用包含在 0 和 31 之間的一個值的寄存器指定移位數量。


 



邏輯或算術左移


(Logical or Arithmetic Shift Left)


Rx, LSL #n    or

  Rx, ASL #n    or

  Rx, LSL Rn    or

  Rx, ASL Rn

接受 Rx 的內容并按用‘n’或在寄存器 Rn 中指定的數量向高有效位方向移位。最低有效位用零來填充。除了概念上的第 33 位(就是被移出的最小的那位)之外丟棄移出最左端的高位,如果邏輯類指令中 S 位被設置了,則此位將成為從桶式移位器退出時進位標志的值。


考慮下列:


MOV    R1, #12

  MOV    R0, R1, LSL#2

在退出時,R0 是 48。 這些指令形成的總和是 R0 = #12, LSL#2 等同于 BASIC 的 R0 = 12 << 2


 



邏輯右移


(Logical Shift Right)


Rx, LSR #n    or

  Rx, LSR Rn

它在概念上與左移相對。把所有位向更低有效位方向移動。如果邏輯類指令中 S 位被設置了,則把最后被移出最右端的那位放置到進位標志中。它同于 BASIC 的 register = value >>> shift。


 



算術右移


(Arithmetic Shift Right)


Rx, ASR #n    or

  Rx, ASR Rn

類似于 LSR,但使用要被移位的寄存器(Rx)的第 31 位的值來填充高位,用來保護補碼表示中的符號。如果邏輯類指令中 S 位被設置了,則把最后被移出最右端的那位放置到進位標志中。它同于 BASIC 的 register = value >> shift。


 



循環右移


(Rotate Right)


Rx, ROR #n    or

  Rx, ROR Rn

循環右移類似于邏輯右移,但是把從右側移出去的位放置到左側,如果邏輯類指令中 S 位被設置了,則同時放置到進位標志中,這就是位的‘循環’。一個移位量為 32 的操作將導致輸出與輸入完全一致,因為所有位都被移位了 32 個位置,又回到了開始時的位置!


 



帶擴展的循環右移


(Rotate Right with extend)


Rx, RRX

這是一個 ROR#0 操作,它向右移動一個位置 - 不同之處是,它使用處理器的進位標志來提供一個要被移位的 33 位的數量。


乘法指令

 

指令格式


這兩個指令與普通算術指令在對操作數的限制上有所不同:


給出的所有操作數、和目的寄存器必須為簡單的寄存器。

你不能對操作數 2 使用立即值或被移位的寄存器。

目的寄存器和操作數 1 必須是不同的寄存器。

最后,你不能指定 R15 為目的寄存器。


MLA : 帶累加的乘法


(Multiplication with Accumulate)


MLA{條件}{S}  , , ,


                dest = (op_1 * op_2) + op_3

MLA 的行為同于 MUL,但它把操作數 3 的值加到結果上。這在求總和時有用。


 



MUL : 乘法


(Multiplication)


MUL{條件}{S}  , ,


                dest = op_1 * op_2

MUL 提供 32 位整數乘法。如果操作數是有符號的,可以假定結果也是有符號的。


比較指令

 

指令格式


譯注:CMP 和 CMP 是算術指令,TEQ 和 TST 是邏輯指令。把它們歸入一類的原因是它們的 S 位總是設置的,就是說,它們總是影響標志位。



CMN : 比較取負的值


(Compare Negative)


CMN{條件}{P}  ,


                status = op_1 - (- op_2)

CMN 同于 CMP,但它允許你與小負值(操作數 2 的取負的值)進行比較,比如難于用其他方法實現的用于結束列表的 -1。這樣與 -1 比較將使用:


CMN     R0, #1                  ; 把 R0 與 -1 進行比較

詳情參照 CMP 指令。


 



CMP : 比較


(Compare)


CMP{條件}{P}  ,


                status = op_1 - op_2

CMP 允許把一個寄存器的內容如另一個寄存器的內容或立即值進行比較,更改狀態標志來允許進行條件執行。它進行一次減法,但不存儲結果,而是正確的更改標志。標志表示的是操作數 1 比操作數 2 如何(大小等)。如果操作數 1 大于操作操作數 2,則此后的有 GT 后綴的指令將可以執行。

明顯的,你不需要顯式的指定 S 后綴來更改狀態標志... 如果你指定了它則被忽略。


 



TEQ : 測試等價


(Test Equivalence)


TEQ{條件}{P}  ,


                Status = op_1 EOR op_2

TEQ 類似于 TST。區別是這里的概念上的計算是 EOR 而不是 AND。這提供了一種查看兩個操作數是否相同而又不影響進位標志(不象 CMP 那樣)的方法。加上 P 后綴的 TEQ 還可用于改變 R15 中的標志(在 26-bit 模式中)。詳情請參照 psr.html,在 32-bit 模式下如何做請參見這里。


 



TST : 測試位


(Test bits)


TST{條件}{P}  ,


                Status = op_1 AND op_2

[1] [2]
關鍵字:ARM  指令集  操作數 引用地址:ARM詳細指令集

上一篇:nandflash的讀寫(2440)
下一篇:ARM(RISC)和x86(CISC)的技術差異

推薦閱讀最新更新時間:2025-04-24 23:05

處理器架構 (四) ARM指令集
ARM 命名規則——指令架構、CPU的歷史回顧 arm指令集版本和arm版本 arm有多少指令集_官網 arm的指令集有 ARM64指令集 ARM(32)指令集 THUMB指令集 THUMB-2指令集 NEON指令集 VFP指令集 DSP指令集 Jazelle instruction // 實際上他們都屬于 ARM指令集, 也可以說是 ARM指令集 的擴展 自從armv1 開始,ARM指令集一直就在,且跟隨版本變化而不斷升級. 從armv4中的 ARM7E 系列開始就支持增強型DSP指令集,后續命名只要有符號E,就代表支持增強型DSP指令集. 從armv4中的 ARM7TDMI 開始就支持 thumb指令集(命名中帶T就表
[單片機]
處理器架構 (四) <font color='red'>ARM</font><font color='red'>指令集</font>
DSP與ARM存儲器架構和指令集有哪些差異
DSP DSP(digital singnal processor)是一種獨特的微處理器,有自己的完整指令系統,是以數字信號來處理大量信息的器件。一個數字信號處理器在一塊不大的芯片內包括有控制單元、運算單元、各種寄存器以及一定數量的存儲單元等等,在其外圍還可以連接若干存儲器,并可以與一定數量的外部設備互相通信,有軟、硬件的全面功能,本身就是一個微型計算機。DSP采用的是哈佛設計,即數據總線和地址總線分開,使程序和數據分別存儲在兩個分開的空間,允許取指令和執行指令完全重疊。也就是說在執行上一條指令的同時就可取出下一條指令,并進行譯碼,這大大的提高了微處理器的速度。另外還允許在程序空間和數據空間之間進行傳輸,因為增加了器件的靈活性
[嵌入式]
晶心科技嵌入式技術論壇將發布V5處理器指令集架構
亞洲領先之CPU IP上市公司,自主研發小面積、低功耗、高效率的嵌入式處理器核心的晶心科技,將于2017年5月10日及12日分別在上海及北京以「從32到64:智能鏈接新紀元」為主題,「低功耗、高效能、大數據、重安全」為副標題,舉辦第十二屆嵌入式技術論壇(Andes-Embedded? Forum, AEF),并將在論壇中發布晶心科技新一代微處理器指令集架構AndeStar? V5。V5可用于設計64位架構的嵌入式微處理器,64位嵌入式CPU的運算能力及內存存取范圍比32位來得高廣,應用市場包括高階網絡通訊、企業級路由器 (Router)、交換器(Switch)、WLAN、存儲裝置(Storage、SSD等)、人工智能(Deep L
[嵌入式]
[國嵌筆記][025][ARM指令分類學習]
算術和邏輯指令 1.mov 格式:mov {條件}{s} dest , op 作用:把一個值從一個地方移動到另一個地方, dest 必須是寄存器 示例: @mov指令范例 “@”表示注釋 mov r1, #8 mov r2, r1 2.mvn 格式:mvn {條件}{s} dest , op 作用:把一個值取反后從一個地方移動到另一個地方, dest 必須是寄存器 示例: @“0b”表示二進制,”0x”表示十六進制,什么都不加表示十進制 mvn r1, #0b10 mvn r2, #5 mvn r3, r1 3.sub 格式:sub{條件}{s} dest , op1 , op2 作用:減法,用 op1 - o
[單片機]
VSCode+arm-none-eabi+openocd+msys實現STM32在線調試
VSCode是一個非常好用的工具,首先免費,個人和商用都免費。這就解決了很多問題,因為現在國內對版權越來越重視了。所以告別那些破解的keil等工具吧,涉及版權問題不說,還有可能有病毒,木馬等風險。 現在來總結一下VSCode如何實現在線調試STM32代碼的方法。先總結Windows平臺,后面再來總結Mac OS平臺。 1、安裝VSCode 這個不用說了 2、安裝windows-arm-none-eabi擴展 這是一個交叉編譯工具鏈,使用這個工具將代碼編譯成可以在STM32上運行的文件。 直接在VSCode的Extension窗口中,搜索windows-arm-none-eabi,安裝,截至我目前的情況是,需要安裝0.1.2版本,0
[單片機]
VSCode+<font color='red'>arm</font>-none-eabi+openocd+msys實現STM32在線調試
ARM-Linux S5PV210 UART驅動(2)---- 終端設備驅動
  在Linux中,UART串口驅動完全遵循tty驅動的框架結構,但是進行了底層操作的再次封裝,所以先介紹tty終端設備驅動。 一、終端設備   1.串行端口終端(/dev/ttySACn)   2.偽終端(/dev/pty/)   3.控制臺終端(/dev/ttyn,/dev/console) 二、驅動結構   1.tty分層結構如下圖所示:    包含tty核心、tty線路規程、tty驅動,其中tty規程的工作是以特殊的方式格式化從一個用戶或者硬件接收到的數據,常采用一個協議轉換的形式,如PPP、Bluetooth。   2.tty主要源文件關系及數據流向如下圖: 特定的tty設備驅動的主體工作是填充tty_driv
[單片機]
<font color='red'>ARM</font>-Linux S5PV210 UART驅動(2)---- 終端設備驅動
Arm Tech Symposia 年度技術大會:詮釋面向 AI 的三大支柱,與生態伙伴攜手重塑未來
Arm Tech Symposia 年度技術大會今日在上海舉行。作為 Arm 一年一度的技術盛會,本屆大會以“讓我們攜手重塑未來”為主題,吸引了近 2,000 位行業專業人士、工程師以及開發者報名參會,會中聚焦生成式人工智能 (AI)、邊緣 AI、大語言模型 (LLM)、芯粒 (Chiplet) 技術、AI 基礎設施、智能駕駛等前沿科技,旨在推動 AI 技術在 Arm 生態系統中展開進一步的交流與合作。 本次活動中,Arm 深入探討了 AI 對計算的需求,并分享了其作為計算平臺公司如何通過全面的計算子系統、從云到端的軟件開發賦能、緊密合作的生態系統三大核心,助力合作伙伴把握 AI 的發展機遇。如今,Arm 采用更全面的系統級設
[半導體設計/制造]
<font color='red'>Arm</font> Tech Symposia 年度技術大會:詮釋面向 AI 的三大支柱,與生態伙伴攜手重塑未來
基于意法半導體Arm Cortex-M7 MCU STM32H743 的語音辨識解決方案
意法半導體SL-VUI-CLOUD-01是將AVS for AWS IoT Services 集成到智能設備中的經濟高效方式,可以實現基于自然語言理解的最先進的語音控制,因此用戶將享受到目標物聯網終端產品的增強體驗。 能夠與 Amazon Alexa 交談并控制智能家居設備,獲得幫助,聽新聞、查看天氣預報、播放音樂等。 該軟件包實現了音頻前端、亞馬遜喚醒詞、音頻播放和亞馬遜Alexa通信協議軟件。 SDK 僅在內部存儲器上運行,提供最大的集成度和成本效益的解決方案。 SL-VUI-CLOUD-01 采用模塊化方法構建,可輕松進行原型設計和調試,并輕松適應特定的麥克風間距、用戶界面和音頻輸出要求。 該方案包括一個
[單片機]
基于意法半導體<font color='red'>Arm</font> Cortex-M7 MCU STM32H743 的語音辨識解決方案
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 蚌埠市| 务川| 山阴县| 吴旗县| 楚雄市| 远安县| 嘉荫县| 碌曲县| 桐乡市| 龙泉市| 赞皇县| 临朐县| 定兴县| 金山区| 汶川县| 横山县| 河北区| 黑山县| 绥宁县| 开远市| 改则县| 安西县| 彩票| 晋州市| 塔河县| 无锡市| 昌乐县| 丰县| 壶关县| 福海县| 青海省| 桑植县| 新乡县| 灵宝市| 许昌市| 肥东县| 哈密市| 铜川市| 蒲江县| 德钦县| 宝丰县|