这些代码行有什么作用?
MBALIGN equ 1<<0
MEMINFO equ 1<<1
我知道equ
我们在nasm中声明了常量,但是1<<0
做了什么?
它看起来类似于C位运算符,但据我所知,在汇编中我们使用shl
等等。
答案 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<<0
将1
移位0位,因此结果为1.
&LT;&LT;向左移位,就像在C中一样。所以5&lt;&lt; 3评估为5次8或40。
在程序集中使用CPU指令进行运行,但是如果你的表达式可以在编译(汇编)时间中转换为立即值汇编程序支持它们。
答案 2 :(得分:1)
这些行是定义常量。在这种情况下,这些是可以按位或一起进行单独测试的标志。通过将标志定义为1的移位,可以更容易地看到标志的结构。通过写出该表达式的值可以获得相同的效果,但是更难看出哪些位意味着什么。
(在这种情况下,设置位0意味着设置MBALIGN
,位1意味着MEMINFO
。)