Копирование определенного бита из регистра в определенную позицию другого регистра за одну операцию - PullRequest
0 голосов
/ 30 августа 2018

Я пишу код ассемблера для Beaglebone Black PRU (на языке ассемблера PASM), и я изо всех сил пытался решить, казалось бы, простую проблему.

Как следует из заголовка, мне нужно скопировать один бит из указанной позиции в другой регистр в той же позиции. Например,

Скажи, что у меня

r1 = 0bABCDExGH
r2 = 0bIJKLMyOP

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

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

PASM позволяет ссылаться на отдельные биты с помощью точечных суффиксов, например, r2.t3 конкретно ссылается на бит 3. Благодаря этому я решил, что могу использовать что-то вроде

MOV r2.t3, r1.t3

Но компилятор жалуется, что use of .T field not allowed here. Моей следующей попыткой было скопировать r2, например, в r3, очистить соответствующий бит, а затем ИЛИ с тем же битом .t. Так

MOV r3, r2
CLR r3, 3
OR r2, r3, r1.t3

Но, опять же, use of .T field not allowed here.

Это то, где я сдался. Документация по PASM ограничена и запутана, и я не могу найти веских причин, по которым суффикс .T здесь не разрешен (.b для доступа на уровне байтов, кажется, работает просто отлично).

Некоторые справочные материалы, которые я использовал:

...