Assembly 如何在程序集中加载具有预定义字节的寄存器
使用ARM assembly,我想用预定义的字节A、B、C、D加载R0。在Assembly 如何在程序集中加载具有预定义字节的寄存器,assembly,arm,Assembly,Arm,使用ARM assembly,我想用预定义的字节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
.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
假设您正在运行little endian ARM,以下是您的操作方法:
ldr r0, =A
ldr r1, [r0]
rev r0, r1
请注意,执行从小端到大端的转换。请注意,rev指令仅适用于armv6+
如果您正在运行big-endan ARM,只需跳过rev指令即可:)
编辑:rev指令不正确。这里有一个快捷方式
ldr r0,=0xFFAA8877
或者你可以手动做同样的事情
ldr r0,my_number
...
my_number: .word 0xFFAA8877
如果出于某种原因确实需要将它们放在datasection中,只需将其定义为MyValue:.word 0xFFAA8877,然后在代码中使用ldr r0、=MyValue和ldr r0,[r0]第一个将加载第二个将从该地址加载的地址。我需要A、B、C、,D是字节交换R0。其目的是在小端和大端之间交换R0的字节。我将把说明添加到OP中