Я хочу реализовать R10 = R11 + OxFFFFE на языке ассемблера - PullRequest
0 голосов
/ 01 мая 2020

Непосредственное значение, которое я знаю, не может превышать 12 бит в случае ADDW. Есть ли способ реализовать это в одной инструкции

1 Ответ

0 голосов
/ 01 мая 2020

Пусть инструменты сделают всю работу, КСТАТИ сразу же на вооружении (и других МСА) спрашивали и отвечали здесь много раз. Ассемблер GNU выберет оптимальное решение (обычно) с использованием псевдокода.

.cpu cortex-m0
.thumb
ldr r0,=0xFFFFE
.align

00000000 <.text>:
   0:   4800        ldr r0, [pc, #0]    ; (4 <.text+0x4>)
   2:   46c0        nop         ; (mov r8, r8)
   4:   000ffffe    strdeq  pc, [pc], -lr

включить расширения thumb2

.cpu cortex-m7
.thumb
.syntax unified
ldr r0,=0xFFFFE
ldr r1,=0x00010001
.align

другая константа должна была подтвердить, что она пытается выполнить расширения thumb2.

, так что без ярлыков вам нужно либо построить значение по частям, либо сделать относительную нагрузку примерно на c. Или просто закодируйте его псевдокодом и получите то, что вы получите.

аналогичная константа

cpu cortex-m7
.thumb
.syntax unified
ldr r0,=0xFFFFFFFE
ldr r1,=0x00010001
.align

00000000 <.text>:
   0:   f06f 0001   mvn.w   r0, #1
   4:   f04f 1101   mov.w   r1, #65537  ; 0x10001

могла бы быть выполнена без относительной нагрузки p c.

Нет Вы не можете реализовать это с помощью одной инструкции.

, но это:

add r10,r11,#0xFFFFFFFE

Вы можете ... если это поможет.

...