Что означает значение хеш (#), связанное с инструкцией ARM LDR? - PullRequest
9 голосов
/ 23 мая 2011

Я пытаюсь отладить сбой, который я испытываю в своем приложении.Трассировка стека указывает на инструкцию LDR в следующем формате (спасибо дизассемблеру):

LDR R3, [R0,#4]

Мой вопрос касается исходного компонента.Что означает # 4 во втором параметре?Я предполагаю, что это какое-то смещение, но я не нашел документации, подтверждающей это для инструкции LDR.

Ответы [ 3 ]

9 голосов
/ 23 мая 2011

Загружает R3 с адреса в R0 + 4 байта.Так что да, это смещение байта. См. Это объяснение режимов адресации .

2 голосов
/ 23 сентября 2014

Добавляет 4 к значению в R0 и использует его в качестве адреса для загрузки 32-битного значения в регистр R3

1 голос

В газе GNU хэш # требуется только для ARMv7, когда не используется .syntax unified

Например, вы можете написать его без # для ARMv8 aarch64-linux-gnu-as:

LDR x0, [x0,4]

или при использовании .syntax unified в arm-linux-gnueabihf-as:

.syntax unified
LDR x0, [x0,4]

Подробнее: Требуется ли хэш для непосредственных значений в сборке ARM?

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