0

我正在尝试学习 ARM 汇编,我想在寄存器中存储一个带符号的数字,它必须类似于 -

MOV R0, #-10

但这会正常存储数字,而不是作为签名数字。我尝试使用LDRSB-

LDRSB R0, =0x0000000A,但它给了我错误。

4

1 回答 1

1

汇编语言特定于汇编器。你的意思是arm7还是armv7?

这是 gnu 汇编程序

mov r0,#-10
ldr r0,=-10

.thumb

mov r0,#-10
ldr r0,=-10

.syntax unified

mov r0,#-10
ldr r0,=-10

so.s: Assembler messages:
so.s:12: Error: cannot honor width suffix -- `mov r0,#-10'
so.s:7: Error: invalid immediate: -10 is out of range

再试一次

mov r0,#-10
ldr r0,=-10

.thumb

@mov r0,#-10
ldr r0,=-10

.syntax unified

@mov r0,#-10
ldr r0,=-10


00000000 <.text>:
   0:   e3e00009    mvn r0, #9
   4:   e3e00009    mvn r0, #9
   8:   4800        ldr r0, [pc, #0]    ; (c <.text+0xc>)
   a:   4800        ldr r0, [pc, #0]    ; (c <.text+0xc>)
   c:   fffffff6    .word   0xfffffff6

那么您当时在看(全尺寸)ARM吗?

   0:   e3e00009    mvn r0, #9
   4:   e3e00009    mvn r0, #9

这是三个中最容易编码的一个。您可以在 ARM 文档中轻松查看编码。这些工具已经为您完成了一半的工作(0xfffffff6)。

如果你的意思是 armv7 那么

mov r0,#-10
ldr r0,=-10

.thumb

@mov r0,#-10
ldr r0,=-10

.syntax unified

mov r0,#-10
ldr r0,=-10

00000000 <.text>:
   0:   e3e00009    mvn r0, #9
   4:   e3e00009    mvn r0, #9
   8:   f06f 0009   mvn.w   r0, #9
   c:   f06f 0009   mvn.w   r0, #9
  10:   f06f 0009   mvn.w   r0, #9
于 2021-02-01T15:05:46.380 回答