Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_на_ассембл_для_WINLOWS.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
907.78 Кб
Скачать

1.2. Организация памяти [5]

Оперативная память представляет собой последовательность байтов. Байт является минимально адресуемым объемом памяти. Два смежных байта называются словом. Наиболее употребляемым типом данных защищенного режима являются два смежных слова – двойные слова. Два смежных двойных слова называются словами четырёхкратной длины. Можно адресовать десятибайтные ячейки памяти. Адресом ячейки, превышающей по размерам байт, является адрес ее младшего байта. Это самые общие сведения о памяти, необходимые для написания программы на ассемблере. Для работы с любым отладчиком необходимы сведения о логической организации и управления памятью операционной системой и аппаратной поддержке этого управления процессором.

1.2.1. Сегментация

Сегментация - это разделение памяти на логические блоки с целью эффективного управления пространством логических адресов. Сегменты используются для объединения областей памяти, которые имеют общие атрибуты. При сегментной организации памяти она представляется как одна или несколько последовательностей элементарных ячеек (байтов) переменной длины, размером от одного байта до шестидесяти четырех килобайт в режиме реального адреса и до четырех гигабайт в защищенном режиме. Каждая из этих областей линейного адресного пространства (сегментов) имеет несколько связанных с ней атрибутов. Они включают ее размер, расположение, тип (стек, программа или данные) и характеристики защиты. Эта организация определяется архитектурой процессора.

Видимая программистами модель организации памяти определяется при проектировании вычислительной системы. Архитектура дает программистам свободу выбора модели для каждой задачи и для соответствующей операционной среды. Моделями режима реального адреса являются следующие модели памяти:

tiny – сверхмалая - код программы и ее данные размещаются внутри одного и того же сегмента размером 64К байт, код и данные имеют ближний тип;

small – малая - код программы размещается внутри одного сегмента размером 64К байт, а данные - в отдельном сегменте данных размером тоже 64К байт, и код, и данные должны быть ближнего типа;

medium – средняя - код программы может превышать 64К байт, но данные помещаются в один сегмент размером 64К байт, код имеет дальний тип, а данные – ближний;

compact – компактная - код программы должен помещаться в один сегмент размером 64К байт, а данные могут превышать по размеру 64К байт, код имеет ближний тип, а данные – дальний;

large – большая - и код, и данные программы могут превышать 64К байт, но размер переменной не может превышать 64К байт, код и данные имеют дальний тип;

huge – сверхбольшая - код и данные программы могут превышать по размеру 64К байт, размер переменных также может превышать 64К байт, код и данные имеют дальний тип;

Большая и сверхбольшая модели идентичны. Модель huge введена для совместимости с языками высокого уровня.

flat – линейная – используется при программировании в защищенном режиме, размер сегмента – 4Г байт.

Линейная память: адресное пространство, состоящее из одного массива длиной до 4Г байт, которое процессор с помощью механизма трансляции адресов отображает в пространство физических адресов. С учетом аппаратной поддержки сегментации имеем совмещенные сегменты размером 4Г байт. Указатель является 32-разрядным числом, значение которого может изменяться от 0 до 232 - 1. Перемещение модулей, скомпилированных отдельно друг от друга, может быть выполнено соответствующим системным программным обеспечением. Полный указатель в этом адресном пространстве состоит из двух частей: селектора сегмента - 16-разрядного поля, идентифицирующего сегмент, и относительного 32-разрядного адреса, указывающего на байт внутри сегмента.