Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 10
На сайте нет зарегистрированных пользователей

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

Лабораторная работа по динамическим спискам на Turbo Pascal (удаление ду...
Двунаправленный динамический список на Delphi + Блок схемы
Моделирование автомойки на GPSS + Отчет + Блок схемы

Битовые поля
Как указывалось ранее, биты часто встречаются при программировании интерфейсов аппаратного обеспечения. Как правило, такие интерфейсы определяются как смесь битов и чисел, имеющих разные размеры. Эти биты и числа обычно имеют имена и стоят на заданных позициях в слове, которое часто называют регистром устройства (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 Комментариев · 2896 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
CoolHints2k v1.03
BSButton
PHP: обучение на ...
SynEdit
Профессиональное ...
index.php + мод ...
iChat v.7.0 Final...
Иллюстрированный ...
начисление процен...
Halcyon
FilesInfo
Панель "ссылки"
CwstatusBar
Zoom [Исходник на...
Базы данных в Инт...
100 компонентов о...
Battle.Net - мони...
Последние загруж...
Assistant
Dynamic Titles дл...

Топ загрузок
Приложение Клие... 100779
Delphi 7 Enterp... 97925
Converter AMR<-... 20283
GPSS World Stud... 17034
Borland C++Buil... 14206
Borland Delphi ... 10327
Turbo Pascal fo... 7380
Калькулятор [Ис... 6047
Visual Studio 2... 5213
Microsoft SQL S... 3666
Случайные статьи
Страница управлени...
Алгоритм, расчитыв...
Содержание
Настройка приставк...
Листинг 11.4. Быст...
Объектно-ориентиро...
AVL дерево
Operand types do n...
Выполнение агрегир...
Конфигурационный ф...
База данных на пас...
Защита от несанкци...
InfoSeek Express 2.2
Численные алгоритмы
tld.• Разрешите вы...
Запуск программы
Для постоянных при...
Определение вторич...
Контроль перегрузки
Интерфейс на естес...
Сигнатуры
Объект Selection
Формы и методы рез...
Примеры программир...
Экспериментальный ...
Статистика



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


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