Рекурсивно изменяющиеся биты в ассемблере - PullRequest
2 голосов
/ 21 марта 2011

Учитывая последовательность из 16 битов, я хочу рекурсивно инвертировать эти биты.
Например, 1001 1110 0010 0110 становится 0110 0100 0111 1001.

У меня есть доступ только к ДОБАВИТЬ, И и НЕ.
Подпрограмма принимает 2 параметра: количество битов, оставшихся для обращения, и значения битов. Возвращает результат.

Я пытаюсь придумать способы сделать это. Одна вещь, которая пришла мне в голову, - это запустить последовательность битов: 0000 0000 0000 0001, добавить к ней число оставшихся для обработки битов, оставленное -1 раза, а затем добавить эти биты в битовый массив. Проблема в том, что это кажется очень неэффективным, а также я не уверен, как бы я сохранил результат для обращения битов.

Есть намеки на это? Это домашнее задание, поэтому просто намеки, пожалуйста:)

1 Ответ

5 голосов
/ 21 марта 2011

Вы уже поняли, что можете использовать ADD для сдвига влево (добавляя значение к себе).Таким образом, вы можете многократно сдвигать и затем И с константой с 1 старшим битом, установленным для извлечения битов из старшего в младший.Вы можете построить ИЛИ из И и НЕ (по закону Деморгана), так что вы можете комбинировать эти биты от младшего к старшему, объединяя отдельные биты, начиная с константы 1 и сдвигая влево по ходу, что даст вамобратная битовая последовательность.

Превратить это в рекурсивный процесс довольно просто

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