Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paskal.doc
Скачиваний:
71
Добавлен:
10.06.2015
Размер:
1.28 Mб
Скачать

Порядок выполнения работы

  1. Изучить теоретические сведения по теме “ Разработка программы для работы с нетипизированным файлом”.

  2. Получить у преподавателя индивидуальное задание и разработать программу для работы с нетипизированным файлом согласно заданному варианту.

  3. Показать работающую программу преподавателю.

  4. Ответить на контрольные вопросы.

Контрольные вопросы

  1. Понятие нетипизированного файла. Описание нетипизированного файла.

  2. Средства работы с нетипизированными файлами.

  3. Пример программы для работы с нетипизированными файлами.

Лабораторная работа № 31

Изучение карты памяти. Разработка программы доступа к полям PSP

Цель работы: формирование знаний и умений по работе со схемой распределения памяти, адресацией и работой с Heap-областью. Приобретение навыков разработки программ для доступа к полям префикса программного сегмента.

Краткие теоретические сведения

Чтобы более полно представить все процессы, протекающие внутри любой программы на Паскале, необходимо знать расположение ее внутренних областей в памяти. Для каждой отдельной программы при ее запуске (загрузке в память) MS-DOS организует в памяти что-то вроде анкеты (длинной в 256 байт). Это файл, называемый префиксом программного сегмента (Program Segment Prefix (PSP)).

Система адресации MS-DOS.

ПЗУ

16 блоков по 64 кб каждый

От F0000 до FFFFF

Область кассет ПЗУ

От E0000 до ……..

Расширение BIOS

От D0000 до ……..

От C0000 до ……..

память дисплея

В

А

Рабочее ОЗУ (10 блоков 640 кб)

Обычно под OS

90000

…………………..

10000

00000

Блок или сегмент обозначается 16-ричной цифрой, обозначающей старшую цифру адреса. 0-блок – это адреса: от 00000 до 0FFFF. Абсолютный адрес – это адрес без учета сегментов, он не может быть > FFFFF. Физический адрес = Абсолютный адрес + Смещение. Абсолютный адрес - адрес самого сегмента (16 бит = 2 б). Смещение – адрес внутри сегмента (4 бита). Это содержимое сегментного регистра.

Таким образом, адрес любой ячейки памяти определяется парой чисел:

СЕГМЕНТ:СМЕЩЕНИЕ.

Знак $ - предшествует 16-ой записи числа.

Распределение памяти при выполнении программы

Верхняя граница памяти

FrePtr

Свободная память

HeapPtr

Область для динамических переменных (куча)

OvrHeapEnd

Она заполняется вверх от отметки

вверх

Верхняя граница стека

OvrHeapOrg

Занятая динами ческая память

HeapOrg

Область памяти оверлеев (оверлейный буфер, если он необходим).

Sseg : Str

Стек, для хранения локальных переменных и параметров процедур и функций

Заполненая часть стека

Sseg : 0000

Заполняется вниз

Свободная часть стека

Сегмент данных

Глобальные переменные

Dseg : 0000

Типизированные константы.

Сегмент кода модуля System.

Если он есть в программе

Cодержимое регистров CS, DS, SS не изменяется в ходе программы! А SP-снижается вниз пока не достигнет конца!

Здесь содержится образ EXE файла

Сегмент кода первого модуля (Unit)

Cегмент кода других модулей.

Сегмент кода последнего модуля (Unit)

Cseg : 0000

C егмент кода основной программы.

Стандартная переменная

PrefixSeg= 0000

Начальный адрес программы

Префикс сегмента программы (PSP) = 256 байт

Это файл анкета о загружаемой программе

После PSP (ProgramSegmentPrefix) располагаются коды EXE-файла – это может быть один сегмент = 64 кбайтам. Если программа разбита на модули, то каждому модулю соответствует свой сегмент кода программы. За СЕГМЕНТОМ КОДА ОСНОВНОЙ ПРОГРАММЫ располагаются сегменты в порядке, обратном тому, который указан при вызове в разделе USES.

Затем располагается СЕГМЕНТ КОДА МОДУЛЯ System. После следует СЕГМЕНТ ДАННЫХ – все константы, переменные (глобальные).

За СЕГМЕНТОМ ДАННЫХ следует СЕГМЕНТ СТЕКА.

Назначение сегмента стека:

1.при вызове процедур и функций он служит для передачи параметров;

2. здесь размещаются все локальные переменные на уровне процедур и функций;

3.здесь сохраняются все критические значения программы.

Чтобы узнать количество стековой памяти, требуемой программе, можно после компиляции, посмотреть это режиме Info.

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