【问题标题】:What's the meaning of "shift operates on bits individually"?“移位单独对位进行操作”是什么意思?
【发布时间】:2019-01-13 06:10:00
【问题描述】:

我在我的书中读过这句话:

逻辑和移位指令分别对位进行操作 算术,对整个单词进行运算

用于隔离字段。通过掩蔽或来回移动。

这两个句子我完全看不懂。

移位和算术指令都会改变所有位(在某些情况下),而在算术中,位会被逐个相加来计算答案。

那么这部分是什么意思“指令对位单独操作不像算术,它对整个单词进行操作”

我的第二个问题:

我不知道这部分有什么想法,你能给我解释一下吗:

用于隔离字段。通过掩蔽或来回移动。

我的第三个问题:什么是逻辑指令。例如,他的意思是 AND,OR 吗?你能解释更多吗?

【问题讨论】:

    标签: assembly bit-manipulation mips bitwise-operators shift


    【解决方案1】:

    逻辑和移位操作通常称为按位操作。它们单独对位进行操作,这意味着每个输出位仅取决于输入中单个固定位位置的位,您可以立即计算该位而不依赖于任何其他位或之前的计算结果

    例如在 AND、OR、XOR 中...output[n](即输出中的第 n 位)是根据 input1[n]input2[n] 计算得出的。类似地,左移 N 只从 input[i - N] 生成 output[i],补码(NOT)从 input[n] 转换为 output[n]。我正在从here 获取示例图像,以便更容易理解

    • 还有:

    • 左移:

    OTOH 加法结果中的每一位都取决于 carry in 并且必须像这样等待前面的加法操作完成 Sn = An + Bn + Cn

    可以通过使用carry-lookahead adder 中的一些逻辑预先计算进位来进行更快的加法,但它仍然比没有依赖项的按位运算更慢并且需要更多的芯片面积。同样,其他算术运算也不能通过单独获取每个输出位来完成。

    这是您的第一个和第三个问题。关于第二个

    用于通过屏蔽或来回移动来隔离字段。

    表示它们用于通过使用 AND 进行掩码来获得 bit fields(即,通过过滤掉掩码为零的位置中的位,仅让该字段中的位位通过),或将位移出为零并回到原来的位置

    进一步阅读:

    【讨论】:

      【解决方案2】:

      逻辑指令是and,or,xor,但是第一句话我都不懂。

      关于第二个,假设您对单词的一部分感兴趣,例如位 6..4,并且您想要提取此信息。有两种方法可以做到这一点。

      1. 使用遮罩和移位。您设置一个掩码,在您感兴趣的字段上设置一个掩码,在其他地方设置一个零,然后对这个掩码应用 AND。

        unsigned original ;        // initial data is yyy...yyyxxxyyyy 
                                   // where the interesting part is coded by xxx
        unsigned field ;           // we want to have field=00..0xxx
        unsigned mask = 0x70 ;     // 0...01110000 ones on the interesting part
        field = original & mask  ; // field=0...00xxx0000
        field >>= 4 ;              // field=00...00xxx
        
      2. 只使用班次

        unsigned original, field ; // initial data and interesting field
        field = original << 25  ;  // put interesting bits in the msb of field 
                                   // field=xxxyyyy00..00
        field >>= 29 ;             // get rid of the 4 LSB -> field=00...00xxx
        

      如果您想修改这些位而不是提取它们,可以使用类似的方法。

      【讨论】:

        猜你喜欢
        • 2012-06-07
        • 2018-10-25
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 2015-03-12
        • 2018-09-18
        • 1970-01-01
        • 2011-09-11
        相关资源
        最近更新 更多