Язык ассемблера специфичен для ассемблера. Вы имели в виду arm7 или armv7?
это гну ассемблер
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. И инструменты уже сделали за вас половину работы (0xffffffff6).
Если вы имели в виду 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
person
old_timer
schedule
01.02.2021
MOV R0, #-10
в режиме ARM с помощью ассемблера GNU, ассемблер преобразует его вMVN R0, #9
. Эта инструкция загрузитR0
сNOT 9
==0xFFFFFFF6
==-10
. - person Michael   schedule 31.01.2021LDRSB
не инвертирует исходный операнд (он не превратит 10 в -10), он просто расширяет операнд по знаку с 8 до 32 бит. Итак, если вы хотели -10, вы должны сказать так:LDRSB R0, =-10
. Это немного странный способ сделать это, поскольку вы можете просто использоватьMVN/MOV
. На самом деле, GAS преобразует этоLDRSB
вMVN
. - person Michael   schedule 31.01.2021mvn
? Например, машинный код нигде не содержит отрицательное целое число до 2? Почему это проблема для вашего варианта использования? Вы пишете JIT-генератор кода и хотите использовать член битового поляsigned int immediate:8
или что-то в этом роде? ARM работает иначе; выберите другую ISA, такую как MIPS или x86, если вам нужны простые немедленные расширенные знаки. - person Peter Cordes   schedule 31.01.2021