Как найти первую логическую единицу в dword в ARM Assembly? - PullRequest
0 голосов
/ 27 мая 2019

Я хочу знать, как найти первую логическую единицу (один бит) в слове с регистрами R0 и R1, например, справа налево.Как мне достичь описанного выше?

Я пробовал перебирать элементы меча, но, похоже, я не понимаю, чего от меня ожидают правильно.Также попытался сместить вправо и влево, но безуспешно.

MOV R2, R0, LSR #31
loop:
MOVS R0, R0, LSL #2
ADC R2, R2, R0, LSR #31
bne loop

Я хочу использовать ранее описанное для нахождения текущего индекса одиночного бита

1 Ответ

2 голосов
/ 28 мая 2019

Вы можете использовать CLZ для подсчета лидирующих нулей.Вычитая начальные нули из 31, вы можете получить местоположение первого 1 в байте.

CLZ R1, R0
RSB R1, R1, #31

R0 содержит DWORD, с которым вы хотите работать.
R1 в конце содержит «первую логическую единицу».

Инструкция CLZ подсчитывает число ведущих нулей в значении в Rm и возвращает результат в Rd.Значение результата равно 32, если биты не установлены в регистре источника, и ноль, если бит 31 установлен.

Когда к RSB добавлен дополнительный суффикс S, Флаги состояния будут обновлены, и будет обнаружен регистр #0.

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