ARM彙編指令——算數和邏輯指令
阿新 • • 發佈:2019-01-31
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