Получение адреса метки в регистр на ARM?
Как написать инструкцию, в которой будет указан адрес, помеченный меткой в регистр?
- Зачем использовать код armeabi-v7a по кодексу армейцев?
- Явный доступ к банковским реестрам на ARM
- Возможно ли, чтобы процессор x86 соответствовал процессору ARM с точки зрения производительности на ватт?
- Linux Arch на ARM - Случайный USB-накопитель "заморозить"
- Возможно ли запустить двоичный файл x86 на процессоре ARM?
- Обращение с ARM TrustZones
- Как ARM Linux подражает грязным, доступным и файловым битам PTE?
- exit.c :(. текст + 0x18): неопределенная ссылка на `_exit 'при использовании arm-none-eabi-gcc
Существует четыре способа, три из которых описаны в руководстве Gnu Assembler от Sourceware . Я думаю, что это что-то вроде ярлыка,
target: .long 0xfeadbeef
-
adr r0,target
-
adrl r0,target
-
ldr r0,=target
-
sub r0,pc,#(.+8-target)
Первые два очень похожи и генерируют sub r0,pc,#offset
. 3- й ставит длинный в литеральном пуле и загружает его через ldr r0,[pc,#offset2]
или может использовать mov
если ассемблер может найти его (обычно выравниваемая метка, например, 0x8000 ). Последняя версия предназначена для расчета вручную.
Разница между adr
и adrl
происходит от непосредственных операндов. Они 8 бит, повернутые на несколько кратных. Поэтому, если адрес далеко, вам может потребоваться выполнить две инструкции, которые обычно будут быстрее, чем 3- й вариант ldr
которые получают полный 32-бит через кеш данных или память .
См. Также: Перемещение в ассемблере