|
2.ARM汇编
ARM本身属于RISC指令系统,指令条数就很少,而其编程又以C等高级语言为主,我们仅需要在Bootloader的第一阶段用到少量汇编指令:
(1)+-运算
ADD r0, r1, r2 ―― r0 := r1 + r2 SUB r0, r1, r2 ―― r0 := r1 - r2 |
其中的第二个操作数可以是一个立即数:
ADD r3, r3, #1 ―― r3 := r3 + 1 |
第二个操作数还可以是位移操作后的结果:
ADD r3, r2, r1, LSL #3 ―― r3 := r2 + 8.r1 |
(2)位运算
AND r0, r1, r2 ―― r0 := r1 and r2 ORR r0, r1, r2 ―― r0 := r1 or r2 EOR r0, r1, r2 ―― r0 := r1 xor r2 BIC r0, r1, r2 ―― r0 := r1 and not r2 |
(3)寄存器搬移
MOV r0, r2 ―― r0 := r2 MVN r0, r2 ―― r0 := not r2 |
(4)比较
CMP r1, r2 ―― set cc on r1 - r2 CMN r1, r2 ―― set cc on r1 + r2 TST r1, r2 ―― set cc on r1 and r2 TEQ r1, r2 ―― set cc on r1 or r2 |
这些指令影响CPSR寄存器中的 (N, Z, C, V) 位
(5)内存操作
LDR r0, [r1] ―― r0 := mem [r1] STR r0, [r1] ―― mem [r1] := r0 LDR r0, [r1, #4] ―― r0 := mem [r1+4] LDR r0, [r1, #4] ! ―― r0 := mem [r1+4] r1 := r1 + 4 LDR r0, [r1], #4 ―― r0 := mem [r1] r1 := r1 +4 LDRB r0 , [r1] ―― r0 := mem8 [r1] LDMIA r1, {r0, r2, r5} ―― r0 := mem [r1] r2 := mem [r1+4] r5 := mem [r1+8] |
{..} 可以包括r0~r15中的所有寄存器,若包括r15 (PC)将导致程序的跳转。
|
|