Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何在程序集中加载具有预定义字节的寄存器_Assembly_Arm - Fatal编程技术网

Assembly 如何在程序集中加载具有预定义字节的寄存器

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

使用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 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中