我有一个用C写的库,混合了一些ARM的汇编。它过去是为armv6编译的。现在我正试着把它升级到armv7。但是,有一个中断处理程序具有armv7中不允许的指令stmdb sp!, {pc}。armv7上的等效指令是什么?我尝试过str r15, [sp, #-4]!,但这不起作用。
发布于 2011-10-24 20:39:25
在PUSH和POP说明的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模式中经常需要/遇到。但这实际上是将程序计数器保存到堆栈的目的吗?人们可以用其他方式无法实现的事情来做什么?
发布于 2011-10-22 03:04:37
"armv7“是相当通用的。你实际使用的芯片是什么?你在为ARMv7-M编译吗?那么试试PUSH {PC}吧。尽管我预计这不会是你会遇到的唯一问题。我认为您应该发布一些代码片段,并更详细地描述您要移植到的特定环境。
https://stackoverflow.com/questions/7853351
复制相似问题