Установите регистр ARM64 на -1 - PullRequest
0 голосов
/ 04 мая 2018

Я изучаю АСМ и вот моя проблема

bl         method_which_returns_number
mov        x21, x0
cmp        w21, #0x1

Кажется, что метод, вызванный bl, вернет число в регистр x21, это правильно? Как я могу изменить / установить регистр x21 или x0 на целое число -1?

1 Ответ

0 голосов
/ 05 мая 2018
 mov  x0, #-1

собирается следующим образом: (с aarch64-linux-gnu-as minus1.S && aarch64-linux-gnu-objdump -d a.out):

0:   92800000        mov     x0, #0xffffffffffffffff         // #-1

Это movn x0, #0


Сборщики ARM знают, как кодировать mov различные способы поддержки различных видов непосредственных битовых комбинаций. AArch64 имеет несколько форм немедленных с различными правилами кодирования. Использование mov выдаст ошибку, если не удастся собрать одну инструкцию с немедленным , поэтому вам не нужно беспокоиться о том, что она превратится в нагрузку, относящуюся к ПК, как ARM32 ldr r0, =constant может псевдоинструкция.

В документации ARM перечислены несколько форм mov, и , одна из которых является псевдонимом для movn, что отменяет его операнд-источник. Другие формы включают в себя форму, основанную на orr -mmediate (с архитектурным нулевым регистром), который поддерживает повторяющуюся битовую комбинацию 2,4,8,16,32 или шириной 64 бита. И один из них основан на movz, 16-битное мгновенное смещение влево в любую позицию.


Кажется, что метод, вызванный bl, вернет число в регистр x21, это правильно?

Нет, синтаксис ARM: op dst, src.

mov x21, x0 копирует возвращаемое значение из x0 в x21. Целочисленные возвращаемые значения находятся в x/w0, так же, как в AArch32, где возвращаемые значения находятся в r0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...