一桶浆糊

风起云涌,我笑熬浆糊
posts - 14, comments - 5, trackbacks - 0, articles - 7
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

ARM指令点滴

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实现;


只有注册用户登录后才能发表评论。