
汇编
vip-spiter
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ADD、SUB、RSB、ADC、SBC 和 RSC
示例 mov r2, #0x1000 led_loop: sub r2, r2, #0x1 /*Thumb-2 ADD and SUB only,对R2寄存器减1*/ cmp r2, #0x0 bne led_loop /*BNE指令 是“不相等(或不为0)跳转指令 ”:*/ ldr r0, =pGPBDAT /*R0保存要设置的寄存器*/ ldr r1, =0转载 2013-10-31 08:43:19 · 5999 阅读 · 0 评论 -
关于ARM的B,BL跳转指令
假设跳转指令处的地址是A,跳转目标处的地址是B. B,BL指令保存的是偏移地址,这个地址的计算方法是: 1.B-(A+8).A+8是因为ARM的流水线使得指令执行到A处时,PC实际的值是A+8. 2.第一步得到的值是4的倍数,因为ARM的指令是4对齐的,即最低两位为00.于是将这个值右移两位. 3.得到最终偏移 执行时: 1.取出偏移 2.左移两位 3.加入PC,这时PC的值刚转载 2013-10-31 08:46:10 · 549 阅读 · 0 评论 -
.balignl 16,0xdeadbeef浅析
最近在分析u-boot的源代码,看到这一行: .balignl 16, 0xdeadbeef 不知道为什么要这样写,0xdeadbeef,明显是个单词组,写在这里有何意义呢?查阅了众多资料的时候才晃然大悟。 下面我一步步来说明: 首先要弄明白.balignl的意思,这其实应该算是一个伪操作符,伪操作符的意思就是机器码里,并没有一个汇编指令与其对应,是转载 2013-10-31 09:02:14 · 773 阅读 · 0 评论 -
伪指令LTORG
LTORG用于声明一个数据缓冲池,(也称为文字池)的开始。在使用伪指令LDR时,常常需要在适当的地方加入LTORG声明数据缓冲池,LDR加载的数据暂时放于数据缓冲池。 语法 LTORG 使用说明: 当程序中使用LDR之类的指令时,数据缓冲池的使用可能越界。为防止越界发生,可使用LTONG伪操作定义数据缓冲池。通常大的代码段可以使用多个数据缓冲池。ARM汇编编译器一般把数据缓冲池放在代码段的转载 2013-10-31 09:34:53 · 773 阅读 · 0 评论 -
BNE 与 BEQ
当前运算结果为1,则Z=0 当前运算结果为0,则Z=1 bne: 标志寄存器中Z标志位不等于零时, 跳转到BNE后标签处 beq: 标志寄存器中Z标志位等于零时, 跳转到BEQ后标签处 条件码助记符: EQ 相等 NE 不相等 CS/HS 无符号数大于或等于 CC/LO 无符号数小于 MI 负数 PL 正数或零 VS 溢出 VC 没有溢出 HI 无符号转载 2013-10-31 09:53:39 · 2138 阅读 · 0 评论