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/ |