Я совершенно новичок в TMS320C6713x и его VelociTI архитектуре, но обычно DSP имеет инструкции для обработки битовых полей.
В этом случае я нашел это:
ext
извлекает битовое поле, а знак расширяет его в 32-битном регистре.
extu
то же, что и выше, но ноль расширяет его.
clr
очистить битовое поле.
set
установить битовое поле.
Инструкции ext/u
работают точно так же, как ваш код (сдвиг влево, затем сдвиг вправо) до такой степени, что непосредственные операнды совпадают.
Возможный код для извлечения бита 17 (обратите внимание, что бит 17 является 18-м битом) может быть:
EXT A0, 14, 31, A0
[A0] B LOOP
Обратите внимание, что этот код не проверен.
CLR
и SET
могут быть полезны для очистки и установки набора битов соответственно.
Операнд более простой, чем ext/u
, это младший бит и старший бит (оба включительно) битового поля.
CLR A0, 0, 3, A0 ;Clear the lowest nibble of A0
SET A0, 4, 7, A0 ;Set the high nibble of the lowest byte of A0
Как предлагается в комментарии, AND
также будет делать, но если я правильно понял таблицу данных, вы можете использовать только регистр-регистр или регистр-непосредственное И, где непосредственное значение составляет 5 бит .
Так что для извлечения битов выше бита 4 вам нужно предварительно загрузить регистр.