У меня есть небольшой 8-битный процессор, который имеет декодер N-to-M на некоторых выходных линиях - например, для случая от 5 до 32 бит, I запись 00101 и бит 5 изменяет состояние. Единственный интерфейс для вывода - это изменение состояния, обратного чтения нет.
Устройство подсчитывает быстро (но случайно) происходящие события и должно предоставлять этот счет как код «изменения одного бита» другому устройству. Выходные контакты считываются параллельно другим устройством, и может быть прочитан так быстро или экономно, как решит другое устройство, поэтому подсчет необходим.
Мне НЕ нужно использовать стандартный двоичный рефлексивный код Грея - я могу использовать любой однобитовый код изменения.
Однако я хочу иметь возможность отслеживать следующий бит для эффективного изменения.
У меня нет инструкции «LowestBitSet», и нахождение самого младшего бита, установленного в четырех 8-битных регистрах, требует большого количества циклов - поэтому я не могу использовать этот «общий» подход:
Keep binary counter A
Find B as A XOR (A+1)
Bit to change is LowestBitSet in B
Я хочу вычислить это как минимум в памяти и регистров, насколько это возможно, а память определенно слишком ограничена для любой большой таблицы поиска. Продолжительность цикла - более важный фактор.
Есть предложения по алгоритмам?