了解寄存器中的位移位

时间:2015-06-18 20:21:18

标签: embedded

我必须使用这些数据更新32位寄存器 其中包括位移,我对两件事感到困惑:

  1. 哪个是LSB,哪个是MSB,
  2. 此运算符是什么double
  3. 给出表达式:

    |

    ,其余15位为3 << 0 | 7 << 3 | 1 << 6 | 0 << 7 | 1 << 7 | 0 << 8 | 0 << 10 | 0 << 11 | 0 << 12 | 0 << 13 | 0 << 14

    假设寄存器中的初始位为0,数据如何移位?

    0

    011 111 1 0 1 0 0 0 0 0 0 X.......X
    

1 个答案:

答案 0 :(得分:2)

LSB(最低有效位)是其值代表1(2 ^ 0)的位,MSB是其值代表2 ^(n-1)的位,其中n是寄存器中的位数。通常,当以二进制写出时,MSB是最左边的位,LSB是最右边的位。通常情况下,LSB在硬件文档中显示为位0,但我知道有一家公司反转了位编号,因此MSB编号为0.

<<是C shift-left运算符,将位从LSB移位到MSB。因此,7<<3代表二进制的111000

|是C位按OR运算符。如果相应的输入位之一为1,则用于组合结果位为1的值。

查看原始值3 << 0 | 7 << 3 | 1 << 6 | 0 << 7 | 1 << 7 | 0 << 8 | 0 << 10 | 0 << 11| 0 << 12 | 0 << 13 | 0 << 14

来自0000 0000 0000 0011

3<<0 来自0000 0000 0011 1000

7<<3 来自0000 0000 0100 0000

1<<6 来自0000 0000 0000 0000

0<<7

这种类型的构造通常用于描述进入寄存器的值,注意寄存器的各个字段。