“移位分别对位进行操作”是什么意思?

时间:2019-01-13 06:10:00

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

我在书中读过这句话:

  

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

     

用于隔离字段。通过遮罩或来回移动。

我根本听不懂这两个句子。

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

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

我的第二个问题:

我不知道这部分内容,您可以向我解释一下吗?

  

用于隔离字段。通过遮罩或来回移动。

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

2 个答案:

答案 0 :(得分:6)

逻辑和Shift 操作通常被称为按位运算,并且分别对位进行操作,这意味着每个输出位仅依赖于单个固定位的一个或多个位。输入中,您可以立即计算该位,而无需依赖任何其他位或先前的计算结果

例如,在AND,OR,XOR,NOT ... output[n](即输出中的位n)由input1[n]input2[n]计算得出。类似地,向左移动N仅从output[i]产生input[i - N]。我正在从here拍摄示例图片,以便于理解

  • 并且:

    AND operation

  • 左移:

    SHIFT operation

OTOH加法结果中的每一位取决于进位,您必须等待之前的加法操作完成,例如S n = A n + B n + C n

4-bit adder

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

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

  

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

表示它们通常用来通过用AND进行屏蔽来获得bit fields(即,仅使该字段中的位落入,通过过滤掉掩码为零的位置中的位)或移到零来获取What are bitwise shift (bit-shift) operators and how do they work?这些位并移回其原始位置

进一步阅读:

答案 1 :(得分:1)

逻辑指令是and或xor,但我都不明白第一句话。

关于第二个,假设您对单词中的一部分感兴趣,比如说6..4位,然后您就想提取该信息。有两种方法可以做到这一点。

1 /使用遮罩和移位。您在自己感兴趣的字段上设置了一个掩码,并在其他位置将其设置为零,然后对该掩码应用与。

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

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