第1天-ARM彙編指令ADD/SUB/MUL

2020-12-15 電子產品世界

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)

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

ps:帶進位的加法ADC

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)

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

ps:帶進位的減法SBC

MUL : 乘法

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

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

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

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

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

(Multiplication)

ps:帶累加的乘法MLA

MUL{條件}{S} , , dest = op_1 * op_2

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


相關焦點

  • 常用ARM彙編指令
    S 可選後綴;若指定「S」,則根據指令執行結果更新CPSR中的條件碼。Rd 目標寄存器。Rn 存放第1操作數的寄存器。operand2 第2個操作數arm的尋址方式如下:立即尋址寄存器尋址寄存器間接尋址基址加偏址尋址堆棧尋址塊拷貝尋址相對尋址這裡不作詳細描述,可以查閱相關文檔。
  • 有關arm彙編中的align
    經常會看到arm-linux彙編中有如下的指令:.align n它的含義就是使得下面的代碼按一定規則對齊,.align n 指令的對齊值有兩種方案,n 或 2^n ,各種平臺最初的彙編器一般都不是gas,採取方案1或2的都很多,gas的目標是取代原來的彙編器,必然要保持和原來彙編器的兼容,因此在gas中如何解釋 .align指令會顯得有些混亂,原因在於保持兼容。
  • 基於Android的ARM彙編語言系列之五:ARM指令集與Thumb指令集
    章節列表之一:ARM彙編語言開篇之二:C/C++程序生成ARM彙編程序的過程分析之三:ARM彙編語言程序結構之四:ARM處理器的尋址方式之五
  • android平臺arm指令學習和調試
    :123456)Ni是單步,setdisassemble-nexton下一句指令顯示反彙編,使用setarmforce-modearm或者setarmforce-modethumb讓gdb切換thumb和arm代碼顯示。
  • ARM平臺NEON指令的編譯和優化
    如何編譯和優化,包含如何向量化、向量化的ARMCC和GCC編譯器選項、NEON的彙編和EABI程序調用規範、如何在bare-metal和Linux作業系統上檢測NEON硬體、如何指導編譯器進行向量化NEON指令的優化等內容。
  • ARM處理器NEON編程及優化技巧——矩陣乘法的實例
    本文主要介紹如何使用NEON的彙編程序來寫SIMD的代碼,包括如何開始NEON的開發,如何高效的利用NEON。首先會關注內存操作,即如何變更指令來靈活有效的加載和存儲數據。@ 加載矩陣1的下8個元素 mul_col_f32 q12, d0, d1 @ 矩陣 0 * 矩陣1的第一列 mul_col_f32 q13, d2, d3 @ 矩陣 0 * 矩陣1的第二列 mul_col_f32 q14, d4, d5
  • 常用ARM指令集及彙編
    318760.htm(一)ARM指令集1.指令格式2.條件碼3.ARM存儲器訪問指令1)LDR/ STR-加載/ 存儲指令2)LDM/ STM-多寄存器加載/ 存儲指令3)SWP-寄存器和存儲器交換指令4.ARM數據處理指令1)數據傳送指令a)MOV-數據傳送指令
  • 第1天-ARM彙編指令BIC
    BIC : 位清除(Bit Clear)BIC{條件}{S} , , dest = op_1 AND (!BIC R0, R0, #11 ; 清除 R0 中的位 0、1、和 3。保持其餘的不變。
  • ARM彙編指令集之三——跳轉指令
    ARM指令集中的跳轉指令可以完成從當前指令向前或向後的32MB的地址空間的跳轉,包括以下4條指令:1、 B指令B指令的格式為:B{條件}目標地址B指令是最簡單的跳轉指令。一旦遇到一個B指令,ARM處理器將立即跳轉到給定的目標地址,從那裡繼續執行。
  • ARM指令中特殊符號意義
    STR2 SETS 「This is a $STR1"編譯後的結果是STR2的值為This is a pen.如果$後是數字變量(與串變量區分),在彙編時編譯器將該數字變量的數值轉換成十六進位的串,然後用該十六進位的串取代$後的數字變量。如果$後是邏輯變量,在彙編時編譯器將該邏輯變量替換成它的取值(T或者F)。
  • ARM彙編指令集之五——乘法指令與乘加指令
    乘法指令與乘加指令共有以下6條:本文引用地址:http://www.eepw.com.cn/article/201611/317601.htm1、 MUL指令MUL指令的格式為:MUL{條件}{S}目的寄存器,操作數1,操作數2MUL指令完成將操作數1與操作數2的乘法運算,並把結果放置到目的寄存器中,同時可以根據運算結果設置CPSR中相應的條件標誌位
  • ARM彙編指令集之十——異常產生指令
    1、SWI指令SWI指令的格式為:本文引用地址:http://www.eepw.com.cn/article/201611/317607.htmSWI{條件} 24位的立即數SWI
  • 學習逆向工程(外掛)基礎:彙編指令總結
    逆向工程的過程也就是把軟體逆向分析成代碼的過程,代碼可以實彙編代碼也可能是原始碼。下面介紹兩種方法:反彙編,即使用反彙編器,把程序的原始機器碼,翻譯成較便於閱讀理解的彙編代碼。這適用於任何的電腦程式,對不熟悉機器碼的人特別有用。流行的相關工具有OllyDebug和IDA。
  • ARM應用系統開發詳解:第3章 ARM微處理器的指令系統
    在16種條件標誌碼中,只有15種可以使用,如表3-2所示,第16種(1111)為系統保留,暫時不能使用。SWPBR0,R0,[R1];該指令完成將R1所指向的存儲器中的字節數據與R0中的低8位數據交換。3.3.8移位指令(操作)ARM微處理器內嵌的桶型移位器(Barrel Shifter),支持數據的各種移位操作,移位操作在ARM指令集中不作為單獨的指令使用,它只能作為指令格式中是一個欄位,在彙編語言中表示為指令中的選項。
  • 數據處理指令之:SUB減操作指令
    1.指令的編碼格式SUB(Subtract)減操作指令,從寄存器Rn>中減去shifter_operand>表示的數值,並將結果保存到目標寄存器
  • ARM彙編指令集之八——移位指令(操作)
    1、LSL(或ASL)操作LSL(或ASL)操作的格式為:本文引用地址:http://www.eepw.com.cn/article/201611/317605.htm通用寄存器,LSL(或ASL
  • ARM處理器NEON編程及優化技巧——數據加載和存儲
    本文主要介紹如何使用NEON的彙編程序來寫SIMD的代碼,包括如何開始NEON的開發,如何高效的利用NEON。首先會關注內存操作,即如何變更指令來靈活有效的加載和存儲數據。接下來是由於SIMD指令的應用而導致剩下的若干個單元的處理,最後是一個例子來說明用NEON來進行SIMD優化。