我正在尝试弄清楚如何用 LC3 汇编语言实现位计数器。例如:输入“00001100001000001”输出“000000000000100” 我将计算位串中的个数并以二进制输出该数字。我知道如何一次只分析一位,但我不知道如何一次只分析 16 位字符串中的一位。 谢谢。
有多种不同的方法可以计算 LC3 中存储的值的位数。
就我个人而言,我会使用位掩码方法,因为它快速高效,而且我不必担心我的代码陷入困境。
位掩码如下所示:
B_MASK .FILL b1000000000000000
.FILL b0100000000000000
.FILL b0010000000000000
.FILL b0001000000000000
.FILL b0000100000000000
.FILL b0000010000000000
.FILL b0000001000000000
.FILL b0000000100000000
.FILL b0000000010000000
.FILL b0000000001000000
.FILL b0000000000100000
.FILL b0000000000010000
.FILL b0000000000001000
.FILL b0000000000000100
.FILL b0000000000000010
.FILL b0000000000000001
现在您所要做的就是创建一个循环,将每个掩码值与您存储的值进行 AND 运算。如果对它们进行“与”操作后得到一个正数,那么您只需将位计数器加 1,然后对每个剩余的掩码值重复该过程。