ARM指令分类学习

 

算术和逻辑指令

MOV  <dest>,  <op_1>  dest = op_1  dest必须是通用寄存器,op_1可以是通用寄存器或者是立即数

MVN  <dest>,  <op_1>  dest = !op_1  dest必须是通用寄存器,op_1可以是通用寄存器或者是立即数

SUB  <dest>,  <op 1>,  <op 2>  dest = op_1 - op_2  SUB 用操作数 1 减去操作数 2 ,把结果放置到目的寄存器中。操作数 1 是一个寄存器,操作数 2 可

以是一个寄存器,被移位的寄存器,或一个立即数

ADD  <dest>,  <op 1>,  <op 2>  dest = op_1 + op_2  ADD 将把两个操作数加起来,把结果放置到目的寄存器中。操作数 1 o是一个寄存器,操作数 2 可以是一

个寄存器,被移位的寄存器,或一个立即数

AND  <dest>,  <op 1>,  <op 2>  dest = op_1 AND op_2  AND 将在两个操作数上进行逻辑与,把结果放置到目的寄存器中;对屏蔽你要在上面工作的位很有用。 操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数

BIC  <dest>,  <op 1>,  <op 2>  dest = op_1 AND (!op_2)  BIC 是在一个字中清除位的一种方法,与 OR 位设置是相反的操作。操作数 2 是一个 32 位位掩码

(mask)。如果如果在掩码中设置了某一位,则清除这一位。未设置的掩码位指示此位保持不变。这里需要解释一下,mov r1, #0b101011  mov r2,r1,#0b101  结果是

r2 = 101010

 

比较指令

cmp  <op 1>,   <op 2>  status = op_1 - op_2  改变CPSR高位里状态N(Negative)位和Z(Zero)位

TST  <op 1>,   <op 2>  Status = op_1 AND op_2  按位与,如果按位与后的结果是0则改变CPSR高位里的Z(Zero)位

 

跳转指令(分支指令)

b和bl,假设要跳转到一个函数,bl会保存跳转前的地址,但b不会

 

移位指令

lsl和ror,逻辑左移和循环右移,如果是1执行逻辑左移,那结果就是100:;如果11执行循环右移1位,那么结果就是1000 0000 0000 0000 0000 0000 0000 0001

mov r1, #0b1

mov r1,r1,lsl#2

mov r1, #0b1

mov r1,r1,ror#1

 

程序状态字访问指令

msr和mrs

 

存储器访问指令

LDR,STR

 

posted @ 2018-01-19 22:25  sanshijvshi  阅读(285)  评论(0编辑  收藏  举报