1. 程式人生 > >ARM彙編指令——算數和邏輯指令

ARM彙編指令——算數和邏輯指令

MOV : 傳送

(Move)//相當於賦值語句

  MOV{條件}{S}  <dest>, <op 1>

                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>

                dest = !op_1//值會取反
MVN 從另一個暫存器、被移位的暫存器、或一個立即值裝載一個值到目的暫存器。不同之處是在傳送之前位被反轉了,所以把一個被取反的值傳送到一個暫存器中。這是邏輯非操作而不是算術操作,這個取反的值加 1 才是它的取負的值:
  MVN     R0, #4                  ; R0 = -5

  MVN     R0, #0                  ; R0 = -1
 

SUB : 減法

(Subtraction)

  SUB{條件}{S}  <dest>, <op 1>, <op 2>

                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)
減法可以在有符號和無符號數上進行。 

ADD : 加法

(Addition)

  ADD{條件}{S}  <dest>, <op 1>, <op 2>

                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>, <op 2>

                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>, <op 2>
      被清除物件  掩碼
                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
掩碼位為1則被清除物件這一位為0