在二进制LC3中打印出16位数字

时间:2019-04-11 02:41:16

标签: reverse twos-complement lc3

我正在做一些考试练习题,第一部分涉及将十六进制数(例如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 :(得分:0)

无需全部转换为数字。

您可以使用带符号数字的属性来执行此操作。装入要打印的号码后,请立即检查是否为负数。请记住,负数已设置符号位。

这是一些伪代码

  • 加载号码
  • 如果数字为负,则打印1;否则,打印0
  • 执行15次:
    • 将数字加倍。 (将其左移1)。
    • 如果数字为负,则打印1;否则,打印0