2016-06-02 2 views
0

Что делают эти строки кода?Что делает `1 << 0` в этом фрагменте кода?

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

Я знаю, что с equ мы объявляем константы в NASM, но что 1<<0 делать?

Он похож на C битовых оператор, но, насколько я знаю, в сборке мы используем shl и т.д.

+0

в сборке используется [выражения для вычисления все, что вы, возможно, может при сборке времени] (http://www.nasm.us/doc/nasmdoc3.html#section-3.5), не во время выполнения. Нет компилятора для оптимизации чего-либо для вас. Это просто читаемый человеком способ написать константы. –

ответ

2

Хотя сдвиг не делает ничего, что делает вещи проще читать, думать о

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

как говорит

MBALIGN  equ BIT0 
MEMINFO  equ BIT1 
etc. 
+0

Спасибо, это было действительно полезно :) –

1

<< является a bit shift operator, и это как то, что он находится в C для целых чисел без знака. 1<<0 сдвиги 1 по 0 бит, так что результат 1.

< < дает сдвиг бит влево, так же, как это делает в C. Таким образом, 5 < < 3 вычисляется в 5 раз, 8 или 40 .

Использование команды процессора требуется сделать сдвиг во время выполнения в сборке, но вы можете использовать выражения, которые будут преобразованы в непосредственное значение в компиляции (сборки) время если ваш ассемблер поддерживает их.

+0

, но почему мы будем использовать 1 << 0, если ничего не изменим? –

+1

Если это действительно ничего не изменит, вы можете выбрать, использовать его свободно. Но я думаю, что это изменит ясность значения: '1 << 0' лучше, чем' 1', чтобы выразить «первый бит равен 1». – MikeCAT

+0

Не могли бы вы посетить эту страницу: http: //wiki.osdev.org/Bare_Bones_with_NASM –

1

Эти линии определяют константы. В этом случае это флаги, которые могут быть побитовыми или объединены вместе и проверены индивидуально. Легче видеть структуру флагов, определяя их как сдвиги 1. Вы получите тот же эффект, выписав значение этого выражения, но было бы труднее увидеть, какие биты означают что.

(В этом случае, имея бит 0 набор означает MBALIGN установлен, и бит 1 означает MEMINFO.)