Получение адреса метки в регистр на ARM?

Как написать инструкцию, в которой будет указан адрес, помеченный меткой в ​​регистр?

Существует четыре способа, три из которых описаны в руководстве Gnu Assembler от Sourceware . Я думаю, что это что-то вроде ярлыка,

target: .long 0xfeadbeef 
  1. adr r0,target
  2. adrl r0,target
  3. ldr r0,=target
  4. sub r0,pc,#(.+8-target)

Первые два очень похожи и генерируют sub r0,pc,#offset . 3- й ставит длинный в литеральном пуле и загружает его через ldr r0,[pc,#offset2] или может использовать mov если ассемблер может найти его (обычно выравниваемая метка, например, 0x8000 ). Последняя версия предназначена для расчета вручную.

Разница между adr и adrl происходит от непосредственных операндов. Они 8 бит, повернутые на несколько кратных. Поэтому, если адрес далеко, вам может потребоваться выполнить две инструкции, которые обычно будут быстрее, чем 3- й вариант ldr которые получают полный 32-бит через кеш данных или память .

См. Также: Перемещение в ассемблере

Interesting Posts

Как включить всплывающее диалоговое окно в подstreamе

Как использовать TabLayout с панелью инструментов внутри CollapsingToolbarLayout?

Как создать сопоставление «многие-ко-многим» в Entity Framework?

Сколько classов следует помещать в один файл?

Может ли Mini DisplayPort к HDMI-кабелю поддерживать разрешение выше 1920×1200?

Панель действий Android, не отображающая переполнение

Закрытие BufferedReader и System.in

Формат строк в MySQL: разница между фиксированным и динамическим?

CSS делает ширину включает дополнение?

Деление с плавающей запятой против умножения с плавающей запятой

Как установить node.js в качестве службы Windows?

Как я могу исправить «ПРЕДУПРЕЖДЕНИЕ: сообщение не защищено целостностью» при использовании симметричного шифрования GPG?

Почему отсутствующая аннотация не вызывает исключение ClassNotFoundException во время выполнения?

Как отправлять и получать уведомление?

PGP шифрует одно сообщение для нескольких получателей

Давайте будем гением компьютера.