armv7:stmb不带电脑

时间:2011-10-21 17:57:18

标签: arm armv7

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

2 个答案:

答案 0 :(得分:2)

“armv7”相当通用。您使用的实际芯片是什么?你在编译ARMv7-M吗?然后尝试PUSH {PC}。虽然我希望这不会是你遇到的唯一问题。我认为你应该发布一些片段,并详细描述你正在移植到的特定环境。

答案 1 :(得分:2)

PCPUSH指令的注册列表中使用POP有特定限制,具体取决于操作模式,请参阅:

ARM Instruction Set Reference, PUSH/POP

具体来说,在Thumb [2]中,没有push {pc}操作(与说没有stmfd sp!, {pc}操作相同 - push被映射到stmfd sp!)。

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

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