ARM汇编的几个问题
2007-12-13 17:56
288 查看
最近在调试ARM硬件版的程序时遇到一些汇编代码,需要对其中的一些代码作些修改。其中有些ARM汇编代码的问题和技巧,将其记录在此,以备之后查找。(转自会飞的鱼 <parker30_liu at hotmail dot com>)
问题一:thumb模式下PC指针是如何计算预取值的。
和其他现代的处理器一样,ARM处理器在指令执行时是要进行指令预取的,其向前预取了两条指令。在ARM模式下,PC指针的预取值是8(一条指令4个字节)。在thumb模式下,PC指针的预取值是否就是4(一条指令2个字节)呢,答案是不一定。将thumb模式下的adr伪指令生成的机器码反汇编后,发现若当前的指令是4字节对齐的地址时,PC指针的预取值是4,若当前的指令不是4字节对齐的地址,PC指针的预取值是2。
下面的汇编码是一个获取自身入口地址的函数,其中mov r0, r0相当于nop操作。若标号1的地址是4字节对齐的,则adr r0, funcentry则会用指令add r0, pc, #-8替代。若标号1的地址不是4字节对齐的,则adr r0, funcentry则会用指令add r0, pc, #-6替代。
问题一:thumb模式下PC指针是如何计算预取值的。
和其他现代的处理器一样,ARM处理器在指令执行时是要进行指令预取的,其向前预取了两条指令。在ARM模式下,PC指针的预取值是8(一条指令4个字节)。在thumb模式下,PC指针的预取值是否就是4(一条指令2个字节)呢,答案是不一定。将thumb模式下的adr伪指令生成的机器码反汇编后,发现若当前的指令是4字节对齐的地址时,PC指针的预取值是4,若当前的指令不是4字节对齐的地址,PC指针的预取值是2。
下面的汇编码是一个获取自身入口地址的函数,其中mov r0, r0相当于nop操作。若标号1的地址是4字节对齐的,则adr r0, funcentry则会用指令add r0, pc, #-8替代。若标号1的地址不是4字节对齐的,则adr r0, funcentry则会用指令add r0, pc, #-6替代。
funcentry: mov r0, r0 mov r0, r0 1: adr r0, funcentry bx lr |
相关文章推荐
- ARM汇编的几个问题
- 关于在ARM中(MDK下)C与汇编混合编程的问题
- ARM 汇编与C调用的若干问题(一般函数调用情况)
- centos6.5编译android-2.2_froyo的几个问题jdk,gcc,arm-gcc
- 龙芯软件开发(9)--理解龙芯2E几个汇编问题
- 几个简单的汇编初学者问题总结
- 龙芯软件开发(9)--理解龙芯2E几个汇编问题
- ARM-Linux汇编到ADS汇编转换需要注意的问题
- 国嵌ARM 上学期专题3之汇编语言玩得转 常见问题解决方案和知识点总结
- 几个简单的汇编初学者问题总结
- ARM 汇编若干问题(一般中断问题与软中断SWI分析)
- 龙芯软件开发(9)--理解龙芯2E几个汇编问题
- [中级教程]GNU ARM汇编程序开发之----几个常用的指令
- 第一次写ARM汇编程序是碰到的两个问题
- 几个特殊的ARM汇编符号
- 几个2410引导程序里面的 汇编语法问题
- 自己写的几个ARM汇编内存操作函数
- 几个ARM指令操作的汇编实现
- 自己写的几个ARM汇编内存操作函数
- 汇编语言的过程调用的几个问题