Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WOmwwemmjb.file.doc
Скачиваний:
3
Добавлен:
30.04.2022
Размер:
256.51 Кб
Скачать

1. Лабораторная работа № 1

БИТОВЫЕ КАРТЫ ПАМЯТИ

    1. 1.1. Общие методические указания по выполнению лабораторной работы

Структура работы. Работа состоит из 2-х частей: подготовительной (4 часа) и основной (4 часа).

Цели работы.

Подготовительная часть:

– изучить принципы работы с логическими операциями над целыми числами (работа с данными на битовом уровне) в языке Паскаль и разработать программные функции и процедуры, реализующие различные битовые операции;

– получить навыки работы с упакованными данными.

Основная часть:

– изучить принципы работы с битовыми картами памяти;

– разработать приложение, моделирующее работу менеджера памяти на основе битовой карты;

– разработать интерфейс для данного приложения.

Среда выполнения:

Подготовительная часть: Borland Pascal или Delphi (консольное приложение).

Основная часть: Delphi.

Перед выполнением работы необходимо повторить:

– двоичную и шестнадцатеричную системы счисления;

– представление целых чисел без знака в памяти компьютера (8-битовых, 16-битовых, 32-битовых) и соответствующие типы языка Паскаль (byte, word, longint);

– синтаксис задания шестнадцатеричных констант в языке Паскаль;

– операции сдвигов (shl, shr);

– логические операции (not, and, or, xor) над целыми данными;

– написание процедур и функций;

– правила оформления модулей.

    1. 1.2. Теоретические сведения

    2. 1.2.1. Работа с данными на битовом уровне

Обычно при программировании на языке высокого уровня минимальным размером данных является байт. Однако операционной системе часто приходится работать «на битовом уровне». Так, например, в регистре устройства каждый бит может иметь самостоятельное значение (чтение - запись, готов - не готов и т.д).

Чтобы работать на битовом уровне, надо уметь устанавливать (в 1), сбрасывать (в 0) и определять значение отдельного бита целочисленной переменной, не меняя при этом остальных битов.

Биты в числе принято номеровать справа налево, начиная с 0.

Для установки в 1 отдельного бита целочисленной переменной необходимо выполнить операцию ИЛИ (OR) со специально подобранным целым, которое принято называть маской. Для установки бита номер n в маске в соответствующей позиции должна стоять 1, а все остальные биты должны быть 0.

Пусть, например, необходимо установить в 1 5-ый бит целочисленной байтовой переменной x. В качестве маски нам потребуется комбинация битов 00100000, что на языке Паскаль можно записать с помощью шестнадцатеричной константы $20. Имеем:

X := X OR $20;

Сброс бита выполняется операцией И (AND) с маской, в которой все 1, кроме одного 0, находящегося в соответствующей позиции (11011111):

X := X AND $DF;

Для определения значения бита сначала следует скопировать число во временную переменную (чтобы не испортить основное значение), затем сбросить (обнулить) все биты, кроме нужного, т.е. выполнить И с маской, состоящей из нулей и единственной 1 в нужной позиции. Если в результате получится 0 – значит, в исходной переменной был 0. Иначе – 1.

y := x;

y := y AND $20;

if (y > 0) then writeln(1) else writeln( 0);

Для определения значения бита можно также использовать операции сдвига:

i shl j – сдвиг содержимого i на j разрядов влево; освободившиеся младшие разряды заполняются нулями;

i shr j – сдвиг содержимого i на j разрядов вправо; освободившиеся старшие разряды заполняются нулями.

y := x;

y shl 2 shr 7; {«уничтожили» все биты, кроме интересующего нас – в данном случае это 5-й бит}

if (y > 0) then writeln(1) else writeln( 0);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]