在thumb2中设置寄存器的下半部分

时间:2014-07-04 03:48:51

标签: assembly arm cortex-m3 cortex-m

我正在使用适当的棋盘,即cortex-m3,使用thumb2。我需要使用一堆IO端口,这些端口都有以0x400E开头的地址,如0x400E0E3C等。我使用寄存器来存储这些地址。正如我多次这样做,我用地址400E加载寄存器的上半部分。如何使用直接的16位值加载地址的下半部分,而不会打扰上半部分。

这项工作 - movw r8,#400E movt r8,0E3C

我只想做第二个指令,但问题是每次调用movw时,它会将寄存器的上半部分复位为0.我需要一条指令来加载寄存器的下半部分令上半部分感到不安。

1 个答案:

答案 0 :(得分:0)

如果寄存器关闭,则使用索引。即,str rn, [rB, #offset]偏移量非常generous +12bits

加载/存储地址模式旨在有效地处理结构。您可以将寄存器库视为结构。 rB是您的注册银行的基本索引;也许 0x400e0e00

如果范围太大,您可能需要在基础bic中屏蔽几位(请参阅orrrB)。即,如果您有 rB = 0x400e0000 (访问0x400e0fff)并且您需要 0x400ef010 ,那么,

orr rB, rB, #0xf000 # select high portion
ldr rn, [rB, #10]   # offset in high portion.
bic rB, rB, #0xf000 # back to low portion.

bfcbfi也很有用,但如果您的算法允许,您可能会保留多个rB个寄存器。