Posted on 2006-03-21 09:54
一桶浆糊 阅读(966)
评论(0) 编辑 收藏 引用 所属分类:
技术文章
1)立即数;可以通过一个八位的数循环右移得到的数才是合法的立即数。在使用MOV指令的时候要小心,一个非法的立即数编译会报错;使用LDR就方便一些,如果用了=,这个LDR就是伪指令了,编译器会把它翻译成两条指令,这样就可以使用任意立即数。
LDR r13, =0x8001000
编译出来就是
[0x00000028] ldr r13,0x0000007c ; = #0x08001000
[0x0000007c] dcd 0x08001000 ....
2)后缀S;将对CPSR产生影响,典型的,在中断返回的时候,对PC操作的指令中,一定要加S,这样会把SPSR的内容恢复到CPSR中。CMP,TST这些指令不用加S,自动影响CPSR。
SUBS PC , R14_irq , #4
3)点“.”;表示当前指令地址。与PC不同,因为流水线架构,比如三级流水线,一级执行,二级译码,三级装载。
B .
4)THUMB状态;指令的0位是状态位,1表示THUMB状态;
; switch to thumb mode
ADD r0, pc, #1
BX r0
CODE16
BL AppFiqHandler
5)SWP指令可以实现信号量操作,因为一条指令同时操作了两个寄存器;
6)没有取反指令,用XOR实现;没有位设置指令,用ORR实现;