如何在Cortex-m0中使用Hi(r8-r12)寄存器?

时间:2016-12-29 13:04:35

标签: gcc arm cpu-registers thumb

在ARM / Thumb架构中,单个cpu中有16个(r0-r15)寄存器。此外,Thumb-Instruction-Set只能使用前8个(r0-r7)寄存器和r13,r14和r15寄存器。但最后5个(r8-r12)寄存器仍然在cpu中。我们如何使用这些Hi(r8-r12)寄存器?

最近,我正在设计ARM Cortex-M0 CPU中的保护方案。在我的项目中,我想使用r9和r10来存储一些信息。因为其他指令不会使用这些寄存器,所以我不需要推送和弹出这些寄存器。

任何人都可以帮我这些吗?我应该使用BX或BLX指令来切换指令集吗?

Instruction I use the r9 register

Wrong information

2 个答案:

答案 0 :(得分:0)

Cortex-M0仅支持Thumb指令集(以及Thumb2的一些指令)。因此,指令集不可能从Thumb切换到ARM。

参考: https://en.wikipedia.org/wiki/ARM_Cortex-M#Instruction_sets

来自http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0040d/Bgbbfcgc.html的ARM文档几乎没有提示可能使用高寄存器。

[如果时间允许,我会尝试一些事情并很快更新这篇文章]

答案 1 :(得分:0)

请注意,在ARMv6-M架构中,几乎没有指令接受高寄存器。其中最值得注意的是mov(不是movs)。这样,您可以从内存中读取任何低位寄存器,然后将这些值从低位寄存器移至所需的高位寄存器。示例代码:

LDR  r0, [r1]     ; read into r0 the value at address r1
MOV  r9, r0       ; move the recent read value to r9

这样,您可以利用高位寄存器。 我希望这会有所帮助,尽管有点迟了:)