Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 13
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование работы класса персональных компьютеров на GPSS + Отчет + Б...
Моделирование работы узла коммутации сообщений на GPSS + Пояснительная з...
Выбор наилучших альтернатив с использованием методов оптимизации на Delp...

Битовые поля
Как указывалось ранее, биты часто встречаются при программировании интерфейсов аппаратного обеспечения. Как правило, такие интерфейсы определяются как смесь битов и чисел, имеющих разные размеры. Эти биты и числа обычно имеют имена и стоят на заданных позициях в слове, которое часто называют регистром устройства (device register).

В языке C++ есть специальные конструкции для работы с такими фиксированными схемами: битовые поля (bitfields). Рассмотрим номер страницы, используемый менеджером страниц глубоко внутри операционной системы. Вот как выглядит диаграмма, приведенная в руководстве по работе с операционной системой.
position: 31: 9: 6: 3: 2: 1: О:
PPN:
22 3 3 1 1 1 1
PFN unused CCA j dirty j global
name:
nonreachable valid
З2-битовое слово состоит из двух числовых полей (одно длиной 22 бита и другое — 3 бита) и четырех флагов (длиной один бит каждый). Размеры и позиции этих фрагментов фиксированы. Внутри слова существует даже неиспользуемое (и неименованное) поле. Эту схему можно описать с помощью следующей структуры:
struct PPN { // Номер физической страницы
// R6000 Number unsigned int PFN : 22 ; // Номер страничного блока
int : 3 ; // не используется
unsigned int CCA : 3 ; // Алгоритм поддержки
// когерентности кэша // (Cache Coherency Algorithm)
bool nonreachable : 1 ; bool dirty : 1 ; bool valid : 1 ; bool global : 1 ;
};
Для того чтобы узнать, что переменные PFN и CCA должны интерпретироваться как целые числа без знака, необходимо прочитать справочник. Но мы могли бы восстановить структуру непосредственно по диаграмме. Битовые поля заполняют слово слева направо. Количество битов указывается как целое число после двоеточия. Указать абсолютную позицию (например, бит 8) нельзя. Если битовые поля занимают больше памяти, чем слово, то поля, которые не помещаются в первое слово, записываются в следующее. Надеемся, что это не противоречит вашим желаниям. После определения битовое поле используется точно так же, как все остальные переменные. void part_of_VM_system(PPN * p )
{
// . . .
if (p->dirty) { // содержание изменилось // копируем на диск p->dirty = 0 ;
}
// . . .
}
Битовые поля позволяют не использовать сдвиги и наложение масок, для того чтобы получить информацию, размещенную в середине слова. Например, если объект класса PPN называется pn, то битовое поле CCA можно извлечь следующим образом:
unsigned int x = pn.CCA; // извлекаем битовое поле CCA

Если бы для представления тех же самых битов мы использовали целое число типа int с именем pni, то нам пришлось бы написать такой код:
unsigned int y = (pni>>4)&0x7; // извлекаем битовое поле CCA
Иначе говоря, этот код сдвигает структуру pn вправо, так чтобы поле CCA стало крайним левым битом, а затем накладывает на оставшиеся биты маску 0x7 (т.е. устанавливает последние три бита). Если вы посмотрите на машинный код, то скорее всего обнаружите, что сгенерированный код идентичен двум строкам, приведенным выше.
Смесь аббревиатур (CCA, PPN, pfn) типична для низкоуровневых кодов и мало информативна вне своего контекста.
Опубликовал katy April 26 2015 11:44:01 · 0 Комментариев · 3053 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
С# для профессион...
Экспорт базы данн...
Философия C++. Пр...
Иллюстрированный ...
База для Allsubmi...
CoolHints2k
MPTools
PHP 5 в подлинник...
PHP 5. Полное рук...
Turbo Pascal for ...
TDBF
Print Grid
Программирование ...
Таймер и секундомер
PHP/MySQL для нач...
Blib [Исходник на...
Краснов М. - Open...
FormShape [Исходн...
Карта сайта
C++ Builder: Книг...

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98016
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14239
Borland Delphi ... 10373
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
Список тем для изу...
Графические редакт...
Проблемы быстродей...
Что есть инфографи...
Как вставить растр...
Прочие «примочки»:...
ЦЕЛЬ: ХРАНЕНИЕ ИЗО...
Классы в PHP3
• Контроллеры не д...
ClubGaminator
КРАТКОЕ ОПИСАНИЕ G...
“Благодарственная”...
ОЧЕРЕДИ
НИСХОДЯЩАЯ РЕКУРСИЯ
Игровые слоты кази...
Стандарт ITU-T V.34
Применение техноло...
Суммирование элем...
Как поисковые сист...
уровню защиты
Факторы SEO
Подготовка програм...
Применение средств...
Оставшиеся проблем...
По поводу отчислен...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?