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