这段代码中的 1<<0 做了什么?
What does `1<<0` do in this code snippet?
这些代码行的作用是什么?
MBALIGN equ 1<<0
MEMINFO equ 1<<1
我知道 equ
我们在 nasm 中声明常量,但是 1<<0
有什么作用?
它看起来类似于 C 位运算符,但据我所知在汇编中我们使用 shl
等
<<
是 a bit shift operator,它就像 C 语言中的无符号整数。 1<<0
将 1
移动 0 位,因此结果为 1。
<< gives a bit-shift to the left, just as it does in C. So 5<<3 evaluates to 5 times 8, or 40.
需要使用CPU指令在汇编中做shift in runtime,但是可以使用表达式转换为立即数in compile (assemble) time 如果你的 assembler 支持它们。
这些行定义常量。在这种情况下,这些是可以按位或组合在一起并单独测试的标志。通过将标志定义为移位 1 可以更容易地看到标志的结构。通过写出该表达式的值可以获得相同的效果,但是很难看出哪些位表示什么。
(在这种情况下,设置第 0 位表示 MBALIGN
已设置,第 1 位表示 MEMINFO
。)
虽然转变没有任何作用,但它使事情更容易阅读,想想
MBALIGN equ 1<<0
MEMINFO equ 1<<1
俗话说
MBALIGN equ BIT0
MEMINFO equ BIT1
etc.
这些代码行的作用是什么?
MBALIGN equ 1<<0
MEMINFO equ 1<<1
我知道 equ
我们在 nasm 中声明常量,但是 1<<0
有什么作用?
它看起来类似于 C 位运算符,但据我所知在汇编中我们使用 shl
等
<<
是 a bit shift operator,它就像 C 语言中的无符号整数。 1<<0
将 1
移动 0 位,因此结果为 1。
<< gives a bit-shift to the left, just as it does in C. So 5<<3 evaluates to 5 times 8, or 40.
需要使用CPU指令在汇编中做shift in runtime,但是可以使用表达式转换为立即数in compile (assemble) time 如果你的 assembler 支持它们。
这些行定义常量。在这种情况下,这些是可以按位或组合在一起并单独测试的标志。通过将标志定义为移位 1 可以更容易地看到标志的结构。通过写出该表达式的值可以获得相同的效果,但是很难看出哪些位表示什么。
(在这种情况下,设置第 0 位表示 MBALIGN
已设置,第 1 位表示 MEMINFO
。)
虽然转变没有任何作用,但它使事情更容易阅读,想想
MBALIGN equ 1<<0
MEMINFO equ 1<<1
俗话说
MBALIGN equ BIT0
MEMINFO equ BIT1
etc.