如何使用MOV或MVN在手臂上存储有符号的数字?



我正在努力学习ARM汇编,我想在寄存器中存储一个有符号的数字,它必须是-

MOV R0, #-10

但这通常存储数字,而不是有符号数字。我尝试使用LDRSB作为-

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

汇编语言是特定于汇编程序的。你是说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

最新更新