Turbo Assembler 3.0. Руководство пользователя

Использование моделей памяти программы и сегментации


Каждый процессор семейства 80х86 имеет не менее 4 сегментных регистров (CS, DS, ES и SS). Эти регистры содержат значение сег- мента, которое описывает физический блок памяти объемом до 64К (или до 4 гигабайт в процессоре 80386 и старше). Все адреса вы- числяются с использованием в качестве базового значения одного из сегментных регистров.

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

Операционная система или среда программы определяет, работа- ет программа в реальном или защищенном режиме. Если вы используе- те защищенный режим процессоров 80386 или 80486, то операционная система определяет также, допустимы ли большие сегменты (до 4 ги- габайт). Турбо Ассемблер в одинаковой степени поддерживает все эти операционные среды.

В случае общей модели 80х86 программы состоят из одного или более сегментов, где каждый сегмент представляет собой физически различные части кода или данных (или код и данные), к которым можно обращаться через сегментный регистр. На основе этой общей схемы можно построить много производных схем. Чтобы упорядочить их, разработаны стандартные схемы памяти. Так как этих соглашений придерживаются многие языки высокого уровня, в программах на Ас- семблере также следует это делать.

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

Обычно достаточно большую часть неинициализированных данных занимает стек. Он также специализирован, так как регистры SS и SP при выполнении программы инициализируются обычно автоматически областью стека. Таким образом, в стандартных моделях памяти стек инициализируется, как отдельный сегмент.

Можно также комбинировать сегменты в группы. Преимущество использования групп состоит в том, что вы можете задать сегмент- ное значение для всех сегментов группы. Например, инициализиро- ванные данные, неинициализированные данные и сегменты стека часто комбинируются в группы таким образом, что для всех данных прог- раммы можно использовать одно и то же значение сегмента.

В данной главе описывается, как использовать в вашей прог- рамме модели и сегменты, и какие директивы позволяют это делать.



Содержание раздела