我正在做一些考试练习题,第一部分涉及将十六进制数(例如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
我希望找到一种更好的方法。
答案 0 :(得分:0)
无需全部转换为数字。
您可以使用带符号数字的属性来执行此操作。装入要打印的号码后,请立即检查是否为负数。请记住,负数已设置符号位。
这是一些伪代码