0

ARM アセンブリを使用して、定義済みのバイト A、B、C、D を R0 にロードしたいと考えています。.dataセクションでは、次のように定義しています。

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

R0 はFFAA8877、すべてが完了した時点である必要があります。.byteA、B、C、Dに、または.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

ここにショートカットがあります。

ldr r0,=0xFFAA8877 

または、同じことを手動で行うこともできます...

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

リトル エンディアンの ARM を実行していると仮定すると、次のように実行できます。

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

rev 命令は、リトル エンディアンからビッグ エンディアンへの変換を行うことに注意してください。rev 命令は armv6+ でのみ使用できることに注意してください。

ビッグエンダン ARM を実行している場合は、rev 命令をスキップするだけで問題ありません:)

編集:改訂指示が間違っていました。

于 2013-10-06T22:39:21.710 に答える