|
传输数据指令MOV,MVNn MOV(MOVE)指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器 MOV R0,R1 ; 把R1的值传到R0 MOV R3,#3 ;把常数3传给R3,MOV中用#表示常数,这个值不能超过 n MVN( MOVE Negative)取反后再传值,比MOV多了一步取反 MVN R0, #0 ;把0取反(即-1)传给R0 MVN R1,R2 ;把R2的值取反传给R1
|
|
|
|
|
|
|
|
|
|
|
|
|
arm clz 前导零计数 R2=31,R1=32; CLZ.W R2, R1 执行后 R2=26,R1=32。 CLZ.W R2, R1 计算R1最高位0的个数,结果存入R2 00000000 00000000 00000000 00100000 R1=32=100000 那么32- 这个6位数 = 26 最后就把26存入R2了 所以R2=26 R1还是=32 CLZ.W R0, R3 计算R3最高位0的个数,结果存入R0
若R1全为0,则把结果32存入R2. 若R1[31]为1,也就是说R1最高位是1,那么把0存入R2
|
|
|
|
|
|
|
|
|
常用ARM指令2:cpsr访问指令 •mrs & msr • •mrs用来读psr,msr用来写psr •CPSR寄存器比较特殊,需要专门的指令访问,这就是mrs和msr。 |
|
|
|
|
|
|
|
|
|
bic BIC指令的格式为: BIC{条件}{S} 目的寄存器,操作数1,操作数2
BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。 操作数1应是一个寄存器, 操作数2可以是一个寄存器、被移位的寄存器、或一个立即数。 操作数2为32位的掩码,如果在 掩码中置了某一位1,则清除这一位。未设置的掩码位保持不变。 bic r0,r0,#0x1f 0x1f=11111b 其含义:清除r0的bit[4:0]位。 2. orr ORR指令的格式为: ORR{条件}{S} 目的寄存器,操作数1,操作数2 ORR指令用于在两个操作数上进行逻辑戒运算,并把结果放置到目的寄存器中。 操作数1应该是一 个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。 该指令常用于设置操 作数1的某些位。 指令示例: ORR R0,R0,#3 ; 该指令设置R0的0、1位,其余位保持不变。 orr r0,r0,#0xd3 0xd3=1101 0111 将r0与0xd3作算数或运算,然后将结果返还给r0,即把r0的bit[7:6]和bit[4]和bit[2:0]置为1
|
|
|
|
|
|
|
|
|
常用ARM指令3:跳转(分支)指令
b & bl & bx
b 直接跳转(就没打开算返回) bl branch and link,跳转前把返回地址放入lr中,以便返回,以便用于函数调用 bx跳转同时切换到ARM模式,一般用于异常处理的跳转。
|
|
|
|