Счетчик битов 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 к своему счетчику битов, а затем повторите процесс с каждым из оставшихся значений маски.

Другие вопросы по тегам