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