Используя ассемблер gnu, должно работать следующее:
.text
start:
adr r3,target ; target address to r3
ldrsh r0,[r3],#2 ; ldrsh will sign extend
ldrsh r1,[r3] ; .. and post increment to get the next.
add r0,r0,r1 ; r0 = -2 + -3
bx lr
target:
.short -2, -3
Вот пример godbolt вывода компилятора . Важным моментом является то, что ARM не работает с 8 или 16 битами в регистрах (например, ah, al или ax в x86) и всегда использует 32-битные константы. Таким образом, немедленная загрузка небольших отрицательных констант будет иметь вид mvn rX,Y
.