首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >armv7: stmb不占用pc

armv7: stmb不占用pc
EN

Stack Overflow用户
提问于 2011-10-22 01:57:18
回答 2查看 559关注 0票数 2

我有一个用C写的库,混合了一些ARM的汇编。它过去是为armv6编译的。现在我正试着把它升级到armv7。但是,有一个中断处理程序具有armv7中不允许的指令stmdb sp!, {pc}。armv7上的等效指令是什么?我尝试过str r15, [sp, #-4]!,但这不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-24 20:39:25

PUSHPOP说明的reg列表中,对于PC的使用有特定的限制,具体取决于操作模式,请参阅:

ARM Instruction Set Reference, PUSH/POP

具体地说,在Thumb2中没有push {pc}操作(这等同于说没有stmfd sp!, {pc}操作- push映射到stmfd sp!)。

因此,如果你正在编译你的内核代码(如果它不是内核代码,你为什么要有/需要一个中断处理程序),检查你是否正在编译Thumb-2内核。

也就是说,你是说你遇到了一条stmfd sp!,{pc}指令--你确定这不是一个拼写错误?stmfd sp!,{lr} (和它的兄弟,ldmfd sp!, {pc} -这里有PC )是正常的/完全合法的,并且在ARM模式和Thumb-2模式中经常需要/遇到。但这实际上是将程序计数器保存到堆栈的目的吗?人们可以用其他方式无法实现的事情来做什么?

票数 2
EN

Stack Overflow用户

发布于 2011-10-22 03:04:37

"armv7“是相当通用的。你实际使用的芯片是什么?你在为ARMv7-M编译吗?那么试试PUSH {PC}吧。尽管我预计这不会是你会遇到的唯一问题。我认为您应该发布一些代码片段,并更详细地描述您要移植到的特定环境。

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

https://stackoverflow.com/questions/7853351

复制
相关文章

相似问题

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