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

歷史上的今天

今天是:2024年12月04日(星期三)

正在發生

2019年12月04日 | ARM詳細指令集

發布者:學海飄香 來源: 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)的技術差異

推薦閱讀

三星電視去年被OLED(有機發光二極管)和LCD(液晶顯示器)夾攻導致市占率下滑,但隨著今年QLED電視創下佳績,讓三星電子收割近30%市占率外,也坐穩全球第一的寶座。3日,據市調公司IHS Markit公布的數據顯示,三星電子今年第3季在全球電視市場中,銷售量達到28.4%的市占率,與去年第4季(25.8%)相比,上漲了2.6個百分點,拿下全球電視制造企業銷售第...
1. 綜述  由上篇博客可知道IIC協議如何用代碼實現,本篇博客就不涉及協議內容,只講解如何使用。  本次的實驗傳感為:DS3231(時鐘模塊),對于時鐘模塊的具體信息我也就不多介紹,大家可以自行度娘,具體功能無非就是讓單片機中能夠起到獲取時間的作用。該模塊是可以由IIC協議去驅動的,再加上所要的操作也是比較簡單,部分剛接觸IIC協議的小伙伴可...
12月1日,在2020高通驍龍技術峰會上,高通正式發布新一代移動旗艦平臺高通驍龍888,這是高通首款搭載集成式5G基帶的全新旗艦移動平臺。由于在高通公布的首批合作廠商名單中沒有出現三星的名字,有部分網友猜測三星打算先在明年首批機型上使用自家的Exynos 2100處理器。Galaxy S21+最新渲染圖近日,三星Galaxy S21在Geekbench的跑分得到曝光。從圖中可以...
佳能日本官網于 12 月 3 日發布通知,表示目前受到全球零部件供應的影響,多款產品出現交貨延遲的現象。公司對給客戶和業務合作伙伴帶來的不便深表歉意。  新產品將按照預定的先后次序一一發貨,但預計 EOS R3 相機和 RF14-35mm F4 L IS USM 鏡頭需要等待大量時間。  具體延遲情況如下:  1、佳能 EOS R3 無反相機、RF14-3...

史海拾趣

問答坊 | AI 解惑

ISD4003系列高保真語音錄放IC

ISD4003系列工作電壓3V,單片錄放時間4至8分鐘,音質好,適用于移動電話及其他便攜式電子產品中。芯片采用CMOS技術,內含振蕩器、防混淆濾波器、平滑濾波器、音頻放大器、自動靜噪及高密度多電平閃爍存貯陳列。芯片設計是基于所有操作必須由微控制器控 ...…

查看全部問答∨

verilog設計實例,均有原代碼!!

實例分為兩部分,第1部分連續輸入數據處理的電路設計是我們的課程設計,有詳細的設計過程(分析過程,數據流圖,以及狀態機,源代碼仿真和綜合電路圖),另一個是老師給的例題,有100多個例子吧,不過只有源代碼和題目。希望能給大家做一個參考!!…

查看全部問答∨

西門子s7200編程問題

為什么M1.0變為1時不能點亮q0.2,而當M1.1變為1時,Q0.2點亮…

查看全部問答∨

求portel99 LQFP100封裝庫

求portel99 LQFP100封裝庫…

查看全部問答∨

TCPMP修改(有經驗的朋友幫幫忙)

我先說一下我的需求,就是要在播放影片的畫面上面顯示影片的碼率之類的. 假設現在影片的碼率是700kbps,我要在影片的某個位置顯示出來,比如說左上角,這個怎么做出來呢? 或者給我指條明路. 謝謝 PS: 現在TCPMP能在我的機器上面跑了,也能正常解碼.…

查看全部問答∨

傳感器檢測問題.求教大家!

功能描述: 用單片機實現傳感器檢測功能,通過兩個按鍵和一個LED顯示模塊來實現設置檢測閥值的大小,2個按鍵分別為"加1"和"減1"功能,LED上顯示的當前閥值大小.讀入的傳感器信號與設置的閥值進行比較,達到所設閥值大小輸出報警.請 ...…

查看全部問答∨

windows ce 新手請教

一直從事asp.net開發,對wince開發一無所知。 目前有一個gps設備,需要開發征對此設備的應用程序開發。該設備是wince 5.0操作系統。 我使用的是vs 2008做為開發工具(C#)。 我在vs2008中新建項目-智能設備 右側僅有智能設備選項,請問我還需要安 ...…

查看全部問答∨

對M128串口緩沖區逐位處理中的問題(含程序)

現在的問題是,程序無法檢測到其中的位數,并做出相應的處理 表象就是:在串口調試助手中輸入B****E,無任何返回值 程序如下: #include <iom128v.h>           //工作頻率7.3728Mhz #include ...…

查看全部問答∨

不用BOOTLOADER如何啟動Wince系統?

通常我們加載wince系統,總是編譯好eboot然后下載到flash里面,根據菜單提示下載NK。而實際的產品中,可以不用BOOTLOADER,那它是怎么實現系統加載的? 還有個問題,就是OAL的代碼也可以完成所有的bootloader的功能,為什么一定要寫個bootloader? ...…

查看全部問答∨

【求助】想在嵌入式板(S3C2410)用java語言編寫程序在LCD上顯示圖像和視頻,我該如何入手?

最近在學習嵌入式,想在嵌入式板(S3C2410)用java語言編寫程序在LCD上顯示圖像和視頻,到現在沒有一點頭緒,不知道從什么地方入手。在嵌入式linux上的java虛擬機用什么?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 铅山县| 越西县| 阜康市| 云林县| 土默特右旗| 巧家县| 林口县| 锡林郭勒盟| 来凤县| 安新县| 洛南县| 宁晋县| 光山县| 长乐市| 连州市| 滦平县| 贺州市| 安新县| 正宁县| 石城县| 安阳市| 理塘县| 定远县| 曲沃县| 黑龙江省| 江津市| 格尔木市| 冷水江市| 平山县| 花莲市| 宾川县| 黄石市| 利川市| 霸州市| 齐齐哈尔市| 德钦县| 无锡市| 罗江县| 大理市| 融水| 吴桥县|