LDUR равен Загрузить (немасштабированный) Регистр .Он загружает значение (32-разрядное или 64-разрядное) из адреса плюс смещение в регистр.unscaled
означает, что в машинном коде смещение будет не кодироваться с масштабированным смещением, используемым likd ldr
, т.е. сдвиг не будет применяться к битам немедленного смещения.Смещение ( simm немедленно подписано) будет добавлено в базовый регистр Xn | SP .
Таким образом, можно использовать смещения, которые не являютсякратное 4 или 8 с ldur
, в отличие от ldr
Это прототипы для LDUR:
-- loads a 32-bit value
LDUR <Wt>, [<Xn|SP>{, #<simm>}]
-- loads a 64-bit value
LDUR <Xt>, [<Xn|SP>{, #<simm>}]
STUR - Сохранить (немасштабированный) Зарегистрироваться и работает таким же образом, но сохраняет значение в регистре в памяти.
Это прототипы для STUR:
-- stores a 32-bit register
LDUR <Wt>, [<Xn|SP>{, #<simm>}]
-- stores a 64-bit register
LDUR <Xt>, [<Xn|SP>{, #<simm>}]
LDUR / STUR, позволяющие получить доступ к 32/64-битные значения, когда они не выровнены по размеру операнда.Например, 32-разрядное значение хранится по адресу 0x52.
В вашем примере
LDUR R3, [R1, #8]
эта инструкция загрузит в R3
значение, указанное R1
плюс 8
байтов.Вот что означает Справочное руководство ARM под byte offset
.Таким образом, если R1
содержит значение 0x50
, будет загружено значение, хранящееся по адресу 0x58
.Значение R1
не будет изменено.
Инструкция LDR R3, [R1, #8]
( LDR (немедленная) вариант Беззнаковое смещение ) выдает то же самоеОперация, однако, прототип отличается:
-- stores to a 32-bit register
LDR <Wt>, [<Xn|SP>{, #<pimm>}]
-- stores to a 64-bit register
LDR <Xt>, [<Xn|SP>{, #<pimm>}]
Немедленное смещение pimm отличается, LDUR использует simm .Это означает, что смещение интерпретируется по-другому.Первый ( pimm ) является положительным смещением, и его диапазон отличается для 32-разрядного и 64-разрядного вариантов.
В 32-разрядной версии:
- Диапазон значений от 0 до 16380, кратный 4
В 64-битной версии:
- Диапазон значений от 0 до 32760 и можетбыть кратным только 8
Это означает, что некоторые комбинации смещений LDUR и LDR (немедленные) будут производить одну и ту же операцию.