目录
测试b,bl两条指令,测试直接向pc中赋值改变运算位置
1.设计指令:
area init,code,readwrite
entry
ldr r1,=src
ldrb r0,[r1]
ldm r1,{r3,r4,r5}
mrs r2,cpsr
orr r2,#0xf
msr cpsr_c,r2
ldmia r1,{r2,r3,r4}
b addr0
mov r5,#4
bl addr1
addr0
mov r1,#0xff000000
mov r2,#0x20000000
addr1
add r3,r1,r2
adds r4,r1,r2
mov pc,#0x20
mov r7,#0x9
mov r8,#0x12
mov r5,#5
src
dcd 0x12ab1f11,0x1ab2,0x123496f8,4,5,6,7,8,9
END
2.结果分析:
1)ldrb r0,[r1]这条指令是将r1寄存器中存的第一个值以字节(b)形式给r0
2)msr cpsr_c,r2这条指令是将r2的值给cpsr的低八位。
3)ldmia r1,{r2,r3,r4}这条指令是以后增的形式批量加载三个值给r2,r3,r4
4)b addr0这条指令是使程序跳转到addr0标号处执行。
5)mov pc,#0x20这条指令是直接给PC赋值使其指向0x20这个位置。
6)bl addr1这条指令是使程序跳转到addr1标号处执行,并将当前PC值(下一条指令的地址0x28)保存到R14中。