Каков наиболее эффективный способ установить один бит регистра в ARM? - PullRequest
1 голос
/ 07 октября 2011

Я пишу код ассемблера ARM, который в какой-то момент должен устанавливать один бит регистра в 1. Это лучше всего делать, конечно, с помощью метода "register- or -bitmask".Однако, согласно документации ARM, команда Assembly ORR (побитовое ИЛИ) не принимает непосредственные значения.Другими словами, вы можете только побитовое ИЛИ значение в одном регистре со значением в другом регистре.Когда вы думаете об этом, это имеет смысл, потому что инструкции ARM сами по себе 32-битные, поэтому нет способа втиснуть 32-битную маску в инструкцию.Однако записать непосредственное значение в регистр просто для правильного его использования неэффективно, потому что это создает опасность чтение после записи , которая останавливает процессор.В общем, каков наиболее эффективный способ ORR регистрации с маской без потери памяти при постоянном хранении этой маски в памяти?ARM рекомендует что-нибудь?

Ответы [ 2 ]

3 голосов
/ 07 октября 2011
ORR r0, r1, #0x4

прекрасно в стандартном ARM. Вы можете закодировать непосредственные значения в 32-битной инструкции ARM, но их диапазон ограничен. См. Это объяснение .

Ваша ссылка указывает на документацию Thumb; Вы уверены, что должны использовать инструкции Thumb?

1 голос
/ 07 октября 2011

Хотя ARM (или mips, а я предполагаю, что другие) не могут соответствовать немедленному полному регистру, ARM имеет операции alu с непосредственными значениями.И вы не ограничены от 0x00 до 0xFF, вы можете

orr r0,r0,#0x02000000 

, например, без проблем.Смещение от 0x00 до 0xFF в любом месте 32-битного кода. Некоторые инструкции могут дать вам девятый бит от 0x000 до 0x1FF (в любом месте), по крайней мере, я помню кое-что об этой работе (для одной / некоторых инструкций).Вы кодируете инструкцию, как указано выше, и ассемблер позаботится о том, чтобы немедленно вставить в инструкцию инструкцию.

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