OSDev

для всех
Текущее время: 24 июл 2019, 10:10

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Маска из единиц?
СообщениеДобавлено: 26 дек 2013, 19:02 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маска из единиц?
СообщениеДобавлено: 26 дек 2013, 19:37 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1204
Если разрядность frame больше 8 бит, то результат будет отличен от значения frame. Это выделение значения мл. байта frame.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маска из единиц?
СообщениеДобавлено: 05 янв 2014, 13:40 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маска из единиц?
СообщениеДобавлено: 05 янв 2014, 20:09 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1204
Все верно, только лучше сначала делать сдвиг, а потом «И».


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маска из единиц?
СообщениеДобавлено: 06 янв 2014, 08:15 

Зарегистрирован: 10 авг 2007, 15:37
Сообщения: 60
х-м-м, можете пояснить, почему, что-то я сразу не догоняю? я всегда сначала "И" делал..., исходя из логики, что сначала надо выделить то что надо, отбросив лишнее, а потом уже довести до ума сдвигом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маска из единиц?
СообщениеДобавлено: 06 янв 2014, 08:42 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1204
Это мелочи. Связано с оптимизацией кода по размеру. "and reg/mem,3" короче, чем "and reg/mem,3000h".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маска из единиц?
СообщениеДобавлено: 07 янв 2014, 23:45 

Зарегистрирован: 10 авг 2007, 15:37
Сообщения: 60
а-а, вон оно что. понятно, тонкости системы команд...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маска из единиц?
СообщениеДобавлено: 08 янв 2014, 00:58 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
phantom-84 писал(а):
Это мелочи. Связано с оптимизацией кода по размеру.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB