ARM汇编中B跳转指令和LDR跳转的区别 【转】
2011-06-20 23:52
316 查看
B跳转指令是代码位置无关的,经过汇编后会替换为当前PC值加(减)一个修正值,不管这条指令是在哪一个地址执行,都能跳转到指定的位置。B只能在当前PC的32M范围内跳转,LDR只能在当前PC的4KB(0xfff范围)跳转。LDR PC,=xxx指令将向PC直接装载一个标号xxx的值,但标号经过编译后将被替换为一个与RO相对应的值,这样无论指令在何处执行都能跳转到一个指定的位置。以AT91SAM9260 的启动代码片段为例,0x10000000为Flash基址,0x20000000为SDRAM基址:EXPORT __ENTRY__ENTRYResetEntryb HandlerReset。。。。。。HandlerReset其中ENTRY为起点,也就是说这条代码的偏移为0.设HandlerReset的偏移为offset。如果将这段程序按照RO=0x10000000编译则:b HandlerReset <=> ADD PC , PC,#offsetLDR PC,=HandlerReset <=> MOV PC , #(RO+offset)当系统复位时,b HandlerReset 将PC指向0地址处Flash镜像代码的位置;而LDR PC,=HandlerReset将PC指向Flash中的原始代码位置,所以两者都能正常执行。但是,如果程序按照RO=0x20000000编译,编译后生成的代码还是得烧写到Flash中,即0x10000000地址,系统复位后从0地址执行,b HandlerReset仍执行Flash镜像代码,程序能正常执行,而LDR PC,=HandlerReset将使PC指向0x20000000+offset,此地址位于SDRAM中,而此时代码尚未复制,SDRAM中尚无代码,程序不能运行。
相关文章推荐
- ARM汇编中B跳转指令和LDR跳转的区别 【转】
- ARM汇编中B跳转指令和LDR跳转的区别
- ARM汇编中B跳转指令和LDR跳转的区别
- ARM汇编指令:LDR伪指令和LDR装载指令的区别
- [ARM]ldr和 adr/adrl 伪指令的区别
- arm汇编中ldr指令中出现的等号作用
- ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析
- ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析
- [ARM]ldr和 adr/adrl 伪指令的区别
- 移植u-boot-2010.09到S3C2440(二)——ARM汇编中的LDR及ADR的区别及其在U-BOOT中的应用 (SDRAM)
- [ARM]ldr 和 adr 伪指令的区别
- ARM汇编中ldr与adr的区别
- ARM汇编指令:adr和ldr的前因后果
- ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析
- arm指令中mov和ldr有什么区别
- 1.2.17、ARM汇编指令集:数据传输和跳转指令详解
- 在ARM汇编中如何区分LDR是指令还是伪指令
- [ARM]ldr和 adr/adrl 伪指令的区别
- 【ARM汇编】SPACE和DCD指令的区别
- 08_ARM汇编自学笔记指令系统之跳转指令