如何在Assembly中加载预定义字节的寄存器

时间:2013-10-06 21:36:42

标签: assembly arm

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

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

当完成所有操作时,我希望R0为FFAA8877。我不确定我是否应该使用.byte.word甚至是A,B,C,D的其他内容。

编辑: 以下是我正在尝试使用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

2 个答案:

答案 0 :(得分:1)

这是一个捷径。

ldr r0,=0xFFAA8877 

或者你可以手动做同样的事情......

ldr r0,my_number
...
my_number: .word 0xFFAA8877

答案 1 :(得分:0)

假设您正在运行little-endian ARM,请按以下步骤操作:

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

请注意,rev instruction执行从little-endian到big-endian的转换。请注意,rev指令仅可用于armv6 +。

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

编辑:rev指令不正确。