Распечатка 16-битного числа в двоичном LC3 - PullRequest
0 голосов
/ 11 апреля 2019

Я задаю несколько вопросов на экзамене, и первая часть включает распечатку шестнадцатеричного числа (скажем, xFDO1) в виде двоичного числа.

Мой код печатает противоположное, и я знаю, что могу поменять этот порядок, сделав еще один цикл, и вместо того, чтобы начинать с нулевого бита, начнем с n-бита и сдвига бита n-1 раз, чтобы получить следующий бит ии так для всех битов, но я надеюсь, что есть лучший способ!

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

Вот мой код для справки:

    .ORIG x3000

    LD  R1, binary  ;loads number we wanna use
    LD R2, maskbit    ;starts with 0000 0000 0000 0001
LD R4, counter  
  loop    
AND R3,R3,#0    ;resets R3
AND R3,R1,R2    ;checks if has bit there
    BRz else 
    LD  R0, ascii1
    BR done
  else   
LD  R0, ascii0
  done  
OUT
    ADD R2,R2,R2    ;shift bit one over
ADD R4,R4,#-1   ;decrement counter
    BRzp loop       ;loops if counter not negative
  HALT

   counter .fill #15
   maskbit .fill x0001
   ascii0  .fill x30
   ascii1  .fill x31
   binary  .fill XAF12
    .END 

Я надеюсь найти лучший подход.

1 Ответ

0 голосов
/ 13 апреля 2019

Нет необходимости делать все это, переходя на число.

Вы можете использовать свойства чисел со знаком для этого. Когда вы загружаете номер, который хотите напечатать, сразу же проверьте, был ли он отрицательным Помните, что для отрицательных чисел установлен бит знака.

Вот какой-то псевдокод

  • Загрузить номер
  • Если число отрицательное, выведите 1, иначе выведите 0
  • Сделайте это 15 раз:
    • Удвойте число. (Сдвиньте его влево на 1).
    • Если число отрицательное, выведите 1, иначе выведите 0
...