以二进制 LC3 打印出 16 位数字

Printing out 16 bit number in Binary 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
  • 这样做 15 次:
    • 加倍。 (左移 1)。
    • 如果数字为负数打印 1 否则打印 0