Искать реферат        
Рефераты на 5 с плюсом
С нашим сайтом написать реферат проще простого

Программы

Категория: Компьютерные науки     версия для печати   

Страница: [1] [2] [3] [4] [5]

Для процессоров 386 появились еще 2 сегмента дополнительных данных. Эти сегменты в памяти могут розташиняватись как угодно по отношению друг к другу. Никаких ограничений на их расположения нет. Сегменты могут начинаться с одного адреса, то есть могут перекрываться. Они могут розташиняватись в памяти без отключения, или между ними могут быть промежутки.

Для определения адреса следующей команды после выполнения предыдущей используют 2 регистры: CS (регистр сегмента кода, он содержит начало адрес этого сегмента), и IP (регистр указателя команд, качество смещение команды относительно начала сегмента). В процессе выполнения программы содержимое IP автоматически меняется. Если изменить содержимое регистров CS, и IP, то вызов программы начнется с другого адреса. Но явным образом изменить содержимое этих регистров невозможно. Это можно сделать только при использовании некоторых команд. Например при вызове подпрограммы. Или выполнены программы безусловного перехода. Как уже отмечалось в сегменте кода можно описывать данные. Но это делают только в обоснованных случаях, например в программе обработки прерываний.

Начало программы.

В начальной версии необходимо было отметить точку входа в программу некоторой меткой. Имя этой метки затем указывалось в директиве end. Это было признаком окончания файла с программой. В современных ассемблерах для определения точки входа в программу используется директива startup. Она записывается в сегменте кода, это упрощает запись и, кроме этого, автоматически инициализирует значения сегментных регистров. В старых версиях это нужно было делать вручную.

Конец программы.

Для завершения программы требовалось скористяватись стандартной директивой. Она делает соответствующий вызов автоматически. Если программу необходимо закончить специальным образом, например установить резидентную программу, то користяватись этой директивой нельзя. В таких случаях нужно явно вызвать соответствующую функцию операционной системы.

Переменные в программе.

Во всех остальных сегментах выделяется место для переменных, используемых в программе. Разделение сегментов на сегменты данных, стека и дополнительных данных обусловлена тем, что переменные, которые здесь определены имеют разные свойства. Переменные в программе можно разбить на 2 большие группы:

Переменные, явная используются в программе исходя из его логики. Такие переменные как правило имеют имена и используются они для хранения данных, имеющих заранее определенный смысл. Например, переменная которая используется для хранения кода нажатой клавиши.

Часто в программе необходимо иметь место для хранения временных данных.

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

Используется для сохранения переменных, определяющий программист. Как правило это делается при помощи псевдооператор выделения памяти.к объединены в одну группу.

Medium. В значительной степени противоположна предыдущих. Есть несколько сегментов кода и один сегмент данных. Поэтому доступ к подпрограммам и переходы в программе далеки (нужен адрес сегмента и смещения). А доступ к данным осуществляется с помощью короткой адресации (указывается только смещение).

Large. Это наиболее общий способ организации мяты. Здесь могут использоваться несколько сегментов кода и данных. Доступ к переменным, переходы на метки осуществляются с помощью адреса сегментов и смещений.

Huge, Flat. Это достаточно распространенные модели. Такая же организация памяти, как и в large. Она используется для сочетания ассемблера заговорами высокого уровня. В них можно задать такую модель памяти, появляется возможность работы с данными занимающие более 64 Кб. В программе на ассемблере такую модель использовать нецелесообразно. Модель Flat соответствует модели Small, разница в том, что используются 32 разрядные регистры. Такую модель можно организовать используя процессор выше и80386. Преимущественно ее используют для работы в захащеному режиме. В этом случае доступ ко всей области памяти осуществляются с помощью одного сегмента.

При программировании на ассемблере лучше использовать первые 2 модели памяти. Можно использовать другие модели, но в этих случаях программа усложняется, ведь приходится следить за размещением каждого сегмента. Для определения модели памяти используется директива model, что такой формат записи:

Model [<модификатор>] <тип>.

В этой директиве может быть указано еще ряд параметров. Единственным необходимым параметром является параметр. Тип можно дополнительно модифицировать. Для этого необходимо указать один из 4 модификаторов: аnearstack; farstack; use16; use32. При первом стек и данные розташинани в пределах одного сегмента; farstack указывает, что сегмент данных будет розташинаний за пределами стека. Nearstack используется по умолчанию во всех стандартных моделях памяти. Он позволяет организовать интерфейс с языками высокого уровня. Здесь глобальные данные размещены в сегменте данных, а локальные - в сегменте стека. Два последних модификаторы используются только для МП 80386 и старше, они указывают какие сегменты используются в программе, 16-разрядные (64 Кб сегмент) и 32-разрядные (4Гб сегмент). Целесообразно использовать эти модификаторы при разработке программ при использовании 32-разрядных компиляторов.

Страница: [1] [2] [3] [4] [5]

версия для печати

Читайте также:
Собственность
Волынские писатели в государственном
Василь Барка
Национализм как источник социальных конфликтов
Ресурсы коммерческого банка, их формирование и менеджмент