【发布时间】: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