【问题标题】:LC3 loop through and test left most bit in a wordLC3 循环遍历并测试一个单词中的最左位
【发布时间】:2014-12-16 08:04:13
【问题描述】:

所以我有一个词,我想循环并测试最左边的位。我有我的话,我将它传递给我的子程序,我知道如何构建一个循环,我只是不确定如何测试单词中最左边的位。

感谢您的帮助

【问题讨论】:

    标签: lc3


    【解决方案1】:

    最好的方法是使用位掩码——在您要检查的单词和在您希望测试的任何位置带有 1 的位掩码之间执行按位与运算。即二进制:

    my word:   11
    bitmask:   10
             & ==
               10
    

    您可以看到左侧的 1 丢失了。所以要对 16 位数字做类似的事情:

    0x0230 & 0x8000 = 0x0000
    0xC020 & 0x8000 = 0x8000 != 0x0000
    

    这里要注意的重要一点是,如果该位不存在,则 AND 返回 0,如果该位存在,则返回其他内容。它是什么并不重要,只要它不为零。

    【讨论】:

      【解决方案2】:

      不确定它是否适用于您的特定任务,但一种简单的方法可能是对单词执行逻辑/算术左移。这只是通过将单词添加到自身来完成(等于乘以 2,从而将所有位向左移 1 个“点)。完成此操作后,将设置条件代码(假设您使用的是 GPR ) 并且您可以通过检查移位的字是正或零(因此最左边的位是 0)还是负(因此最左边的位是 1)来测试最左边的位是 1 还是 0。按照这种方法循环整个单词,您将能够确定单词中每个位的值。希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多