【问题标题】:Printing out 16 bit number in Binary LC3以二进制 LC3 打印出 16 位数字
【发布时间】:2019-04-11 02:41:16
【问题描述】:

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

我希望找到更好的方法。

【问题讨论】:

    标签: reverse twos-complement lc3


    【解决方案1】:

    无需将所有这些都转移到数字上。

    您可以使用有符号数字的属性来执行此操作。当您加载要打印的数字时,请立即检查它是否为负数。请记住,负数设置了符号位。

    这是一些伪代码

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

    【讨论】:

    • 那太好了,谢谢我没想过要那样做!
    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多