OSDev
http://osdev.su/

Маска из единиц?
http://osdev.su/viewtopic.php?f=6&t=847
Страница 1 из 1

Автор:  Lincor [ 26 дек 2013, 19:02 ]
Заголовок сообщения:  Маска из единиц?

вопрос может быть и не очень подходит для данного сайта. дело в том, что я часто вижу в различных мануалах по написанию ОС наложение на числа битовой маски из единиц, например frame & 0xFF. зачем это нужно? ведь число же вообще никак не изменится!

Автор:  phantom-84 [ 26 дек 2013, 19:37 ]
Заголовок сообщения:  Re: Маска из единиц?

Если разрядность frame больше 8 бит, то результат будет отличен от значения frame. Это выделение значения мл. байта frame.

Автор:  leonidpr [ 05 янв 2014, 13:40 ]
Заголовок сообщения:  Re: Маска из единиц?

Добавлю маленький пример, например в каком-то регистре (например возьму с вики разбитовку регистра EFLAGS из описания архитектуры IA-32) хранятся флаги, определяющие режим работы. Допустим вам нужно выяснить значение поля IOPL, которое определяется двумя соседними битами 12 и 13, тогда код для выделения этих битов будет (пусть копия регистра лежит в переменной eflags):
Код:
(eflags & 0x00003000)>>12

Таким образом отбрасываются (зануляются если быть точнее) все незначащие биты и выделяются только нужные.

Автор:  phantom-84 [ 05 янв 2014, 20:09 ]
Заголовок сообщения:  Re: Маска из единиц?

Все верно, только лучше сначала делать сдвиг, а потом «И».

Автор:  leonidpr [ 06 янв 2014, 08:15 ]
Заголовок сообщения:  Re: Маска из единиц?

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

Автор:  phantom-84 [ 06 янв 2014, 08:42 ]
Заголовок сообщения:  Re: Маска из единиц?

Это мелочи. Связано с оптимизацией кода по размеру. "and reg/mem,3" короче, чем "and reg/mem,3000h".

Автор:  leonidpr [ 07 янв 2014, 23:45 ]
Заголовок сообщения:  Re: Маска из единиц?

а-а, вон оно что. понятно, тонкости системы команд...

Автор:  Bargest [ 08 янв 2014, 00:58 ]
Заголовок сообщения:  Re: Маска из единиц?

phantom-84 писал(а):
Это мелочи. Связано с оптимизацией кода по размеру.

Не только - если делать сначала сдвиг, а потом and, то в and будет указываться всегда непосредственно сама маска из единиц, а если делать сначала and - надо высчитывать сдвинутую маску, что неудобно и писать, и читать.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/