首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ARM汇编中,BL指令正确地将我链接回初始例程,但显示的地址总是错误的

在ARM汇编中,BL指令正确地将我链接回初始例程,但显示的地址总是错误的
EN

Stack Overflow用户
提问于 2019-10-08 23:41:56
回答 1查看 232关注 0票数 0

在THUMB模式下对TM4C1233H6PM的Keil进行初始化后,运行以下代码:

1) loop1 2) BL loop2 3) MOV R3, #3 4) loop2 5) PUSH {LR} 6) POP {PC}

第(2)行将我带到loop2并将0x00000381存储到LR,但在第(6)行中将堆栈弹出到PC后,PC中存储了0x00000380,这是第(3)行的正确地址。

为什么PC会取0x00000380,而实际上0x00000381是从堆栈中推入并弹出的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-09 00:46:43

某些ARM Cortex-M处理器既可以执行Thumb2代码,也可以执行原始ARM代码,其中所有指令都是32位。因此,当从子例程返回时,处理器需要知道它返回的是哪种代码。如果返回地址的最低有效位设置为1,则处理器知道它正在返回Thumb2代码。

请注意,实际指令必须是半字对齐的,因此真正的分支目标地址的LSB必须为0。在检查LSB以了解要执行哪种代码之后,处理器在实际获取指令之前将LSB强制设置为0。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58289744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档