在这段代码片段中,“1<< 0”做了什么?

时间:2016-06-02 00:49:19

标签: assembly nasm bitwise-operators

这些代码行有什么作用?

MBALIGN     equ  1<<0                   
MEMINFO     equ  1<<1

我知道equ我们在nasm中声明了常量,但是1<<0做了什么?

它看起来类似于C位运算符,但据我所知,在汇编中我们使用shl等等。

3 个答案:

答案 0 :(得分:2)

虽然这种转变什么也没做,但它让事情变得更容易阅读,想想

MBALIGN     equ  1<<0
MEMINFO     equ  1<<1

MBALIGN     equ  BIT0
MEMINFO     equ  BIT1
etc.

答案 1 :(得分:1)

<<a bit shift operator,它就像C中的无符号整数一样。 1<<01移位0位,因此结果为1.

  

&LT;&LT;向左移位,就像在C中一样。所以5&lt;&lt; 3评估为5次8或40。

在程序集中使用CPU指令进行运行,但是如果你的表达式可以在编译(汇编)时间中转换为立即值汇编程序支持它们。

答案 2 :(得分:1)

这些行是定义常量。在这种情况下,这些是可以按位或一起进行单独测试的标志。通过将标志定义为1的移位,可以更容易地看到标志的结构。通过写出该表达式的值可以获得相同的效果,但是更难看出哪些位意味着什么。

(在这种情况下,设置位0意味着设置MBALIGN,位1意味着MEMINFO。)