0

使用 ARM 程序集,我想用预定义的字节 A、B、C、D 加载 R0。在本.data节中,我将它们定义为:

A:    .byte    0xFF
B:    .byte    0xAA
C:    .byte    0x88
D:    .byte    0x77

我希望 R0FFAA8877在一切都说完了。不确定我应该为 A、B、C、D 使用.byte甚至.word其他东西。

编辑:这是我要对 R0 做的事情:

@on entry: R0 holds the word to be swapped
@on exit: R0 holds the swapped word, R1 is destroyed
@R0 = A, B, C, D
byteswap:
    EOR R1, R0, R0, ROR #16
    BIC R1, R1, #0xFF0000
    MOV R0, R0, ROR #8
    EOR R0, R0, R1, LSR #8
4

2 回答 2

1

Here is a shortcut.

ldr r0,=0xFFAA8877 

Or you can do the same thing manually...

ldr r0,my_number
...
my_number: .word 0xFFAA8877
于 2013-10-07T03:17:26.657 回答
0

假设您正在运行 little-endian ARM,您可以这样做:

ldr r0, =A
ldr r1, [r0]
rev r0, r1

请注意,rev 指令执行从小端到大端的转换。请注意,rev 指令仅适用于 armv6+。

如果您正在运行 big-endan ARM,只需跳过 rev 指令就可以了 :)

编辑:rev 指令不正确。

于 2013-10-06T22:39:21.710 回答