汇编
我在害怕什么
这个作者很懒,什么都没留下…
展开
-
ADD、SUB、RSB、ADC、SBC 和 RSC
示例mov r2, #0x1000led_loop:sub r2, r2, #0x1 /*Thumb-2 ADD and SUB only,对R2寄存器减1*/cmp r2, #0x0bne led_loop/*BNE指令 是“不相等(或不为0)跳转指令 ”:*/ldr r0, =pGPBDAT/*R0保存要设置的寄存器*/ldr r1, =0转载 2013-10-31 08:43:19 · 5206 阅读 · 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 · 501 阅读 · 0 评论 -
.balignl 16,0xdeadbeef浅析
最近在分析u-boot的源代码,看到这一行: .balignl 16, 0xdeadbeef 不知道为什么要这样写,0xdeadbeef,明显是个单词组,写在这里有何意义呢?查阅了众多资料的时候才晃然大悟。 下面我一步步来说明: 首先要弄明白.balignl的意思,这其实应该算是一个伪操作符,伪操作符的意思就是机器码里,并没有一个汇编指令与其对应,是转载 2013-10-31 09:02:14 · 691 阅读 · 0 评论 -
伪指令LTORG
LTORG用于声明一个数据缓冲池,(也称为文字池)的开始。在使用伪指令LDR时,常常需要在适当的地方加入LTORG声明数据缓冲池,LDR加载的数据暂时放于数据缓冲池。语法LTORG使用说明:当程序中使用LDR之类的指令时,数据缓冲池的使用可能越界。为防止越界发生,可使用LTONG伪操作定义数据缓冲池。通常大的代码段可以使用多个数据缓冲池。ARM汇编编译器一般把数据缓冲池放在代码段的转载 2013-10-31 09:34:53 · 707 阅读 · 0 评论 -
BNE 与 BEQ
当前运算结果为1,则Z=0当前运算结果为0,则Z=1bne: 标志寄存器中Z标志位不等于零时, 跳转到BNE后标签处beq: 标志寄存器中Z标志位等于零时, 跳转到BEQ后标签处 条件码助记符: EQ 相等 NE 不相等 CS/HS 无符号数大于或等于 CC/LO 无符号数小于 MI 负数 PL 正数或零 VS 溢出 VC 没有溢出 HI 无符号转载 2013-10-31 09:53:39 · 2009 阅读 · 0 评论