Как отметил комментаторами LDR r3,#0xaabbccdd
не является допустимым инструкция. Immediates в кодах операций ARM находятся на форме ZeroExtend(imm8) ROR (imm4*2)
, что позволит вам представлять, например, 0xaa000000
, 0x00bb0000
и даже 0xd000000d
- но не, например. 0xaabb0000
или 0xaabbccdd
.
Ассемблеры обычно предоставляют псевдо-инструкцию для загрузки 32-разрядных непосредственных сообщений, например. в ГАС вы можете сделать:
ldr r3,=0xaabbccdd
Какой будет закодировано как PC-относительной нагрузки - т.е. ldr r3,[pc,#offset]
. Смещение (и, следовательно, точное кодирование команд) зависит от расстояния от инструкции до literal pool, где значение сохраняется.
Это не скомпилируется. Вы не можете иметь «LDR r3, # 0xaabbccdd» в одной команде, так как команда рычага может быть 16 или 32 бит, это не позволит вам одновременно загружать 32-битное значение. – auselen
Пожалуйста, укажите вопрос в форме, которая либо «у меня есть эта проблема, и вы хотите знать, как ее лучше всего решить». или «почему этот подход не работает?». Ваш текущий вопрос находится где-то посередине, давая мало уверенности в том, что любой ответ, который я дал, действительно будет для вас практическим. – unixsmurf
@unixsmurf Я думал, что он просто хотел получить двоичное кодирование этих двух инструкций, и я проголосовал близко. – auselen