ARM汇编中B跳转指令和LDR跳转的区别 【转】
来源:互联网 发布:php建站教程 编辑:程序博客网 时间:2024/05/22 04:16
- B跳转指令是代码位置无关的,经过汇编后会替换为当前PC值加(减)一个修正值,不管这条指令是在哪一个地址执行,都能跳转到指定的位置。
- B只能在当前PC的32M范围内跳转,LDR只能在当前PC的4KB(0xfff范围)跳转。
- BL 带返回跳转
- LDR PC,=xxx指令将向PC直接装载一个标号xxx的值,但标号经过编译后将被替换为一个与RO相对应的值,这样无论指令在何处执行都能跳转到一个指定的位置。
- 以AT91SAM9260 的启动代码片段为例,0x10000000为Flash基址,0x20000000为SDRAM基址:
- EXPORT __ENTRY
- __ENTRY
- ResetEntry
- b HandlerReset
- 。。
- 。。
- 。。
- HandlerReset
其中ENTRY为起点,也就是说这条代码的偏移为0.设HandlerReset的偏移为offset。如果将这段程序按照RO=0x10000000编译则:
b HandlerReset <=> ADD PC , PC,#offset
LDR 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中尚无代 码,程序不能运行。
0 0
- ARM汇编中B跳转指令和LDR跳转的区别 【转】
- ARM汇编中B跳转指令和LDR跳转的区别
- ARM 汇编中跳转指令
- ARM汇编指令:LDR伪指令和LDR装载指令的区别
- ARM汇编指令:LDR伪指令和LDR装载指令的区别
- arm汇编的跳转指令
- ARM汇编中LDR伪指令和LDR指令
- ARM汇编中ldr伪指令和ldr指令
- ARM汇编中ldr伪指令和ldr指令
- ARM汇编中LDR伪指令和LDR指令
- ARM汇编指令ldr和MOV的区别
- arm汇编指令之LDR 和 ADR的一些区别
- ARM平台下ldr和bl跳转的区别
- bl和ldr用作跳转指令的区别
- ARM跳转指令B的反汇编分析
- ARM汇编中LDR伪指令和LDR指
- ARM汇编中LDR和ADR的区别
- arm指令中mov和ldr的区别
- 2011年10月20日
- 中兴V880 adb调试
- V880 刷miui
- 2440原理图地址线分析 (转)
- Camera 的 yuv420sp 转 rgb
- ARM汇编中B跳转指令和LDR跳转的区别 【转】
- 从块级元素和内联元素浅谈标签的嵌套规则
- j-tag 和j-link 关系
- 手表的维护与保养小常识
- ltp 测试流程及测试脚本分析
- Linux——VIM 中文显示乱码解决
- GT2440 开发环境搭建 (配合《嵌入式linux应用开发完全手册》)
- hdu 2066 一个人的旅行(dijkstra特殊)
- 《嵌入式linux应用开发》2440 中断 体系结构