Счетчик битов LC3
Я пытаюсь понять, как реализовать счетчик битов на языке ассемблера LC3. Пример: вход "00001100001000001", выход "000000000000100" Я бы посчитал количество единиц в строке битов и вывел бы это число в двоичном виде. Я знаю, как сделать это по одному биту за раз, но я не знаю, как я могу анализировать только один бит 16-битной строки за раз. Благодарю.
1 ответ
Существует несколько различных способов подсчета количества битов в значении, хранящемся в LC3.
- Вы можете использовать сдвиг битов и подсчитывать биты, которые "падают" на концах
- Вы можете использовать битовую маску для проверки каждого из битов в значении
- И я уверен, что есть и другие способы, но они не очень эффективны
Лично я бы использовал метод битовой маски, потому что он быстрый и эффективный, и мне не придется беспокоиться о том, чтобы заморозить мой код.
Битовая маска выглядит следующим образом:
B_MASK .FILL b1000000000000000
.FILL b0100000000000000
.FILL b0010000000000000
.FILL b0001000000000000
.FILL b0000100000000000
.FILL b0000010000000000
.FILL b0000001000000000
.FILL b0000000100000000
.FILL b0000000010000000
.FILL b0000000001000000
.FILL b0000000000100000
.FILL b0000000000010000
.FILL b0000000000001000
.FILL b0000000000000100
.FILL b0000000000000010
.FILL b0000000000000001
Теперь все, что вам нужно сделать, это создать цикл, в котором каждое из этих значений маски AND будет соответствовать вашему сохраненному значению. Если вы получите положительное число после AND, то вы просто добавите 1 к своему счетчику битов, а затем повторите процесс с каждым из оставшихся значений маски.