Студопедия — Сегменты упрощенной модели памяти Small
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Сегменты упрощенной модели памяти Small






Директива Имя Выравнивание Объединение Класс Группа
Codeseg _Text Word Public 'Code'  
Dataseg _Data Word Public 'Data' Dgroup
Stack Stack Para Stack 'Stack' Dgroup

 

Ассемблер использует те же модели памяти, что и языки высокого уровня

· Имя – идентификатор данного сегмента, используемый при назначении адреса и комбинировании (объединении) с другими сегментами.

· Выравнивание – указывает граничные значения на начало сегмента. В процессе ассемблирования, если текущая позиция в начале сегмента не удовлетворяет установленному атрибуту, счётчик адреса увеличивается на соответствующую величину, смещая начало сегмента в область старших адресов (word – начало сегмента должно иметь чётный адрес, para – чётный адрес, кратный параграфу, т.е. 16 бит)

· Объединение – устанавливает правила объединения нескольких сегментов с одинаковым именем. Параметр Public приводит к последовательному объединению сегментов с одинаковым именем в один большой сегмент, имеющий адрес первого из объединяемых сегментов.

· Класс – выполняет роль категории сегмента. Все сегменты одинакового класса во время работы компоновщика физически располагаются друг за другом в памяти

· Группа – позволяет осуществить доступ к данным из всех сегментов, находящихся в ней, с помощью загрузки адреса группы в сегментный регистр.

Наибольшее применение в ассемблерных программах с расширением .exe нашла малая модель памяти Model small, предусматривающая размещение структурных частей программы в двух сегментах:

· сегмент кода программы (64 Кбайт),

· сегмент данных и стека, принадлежащих одной группе Dgroup (64 Кбайт).

Шаблон программы для exe -файлов с подробными комментариями представлен на рис. 1.1. Здесь отметим лишь оформление начала и конца кодового сегмента. Для того чтобы понять, почему кодовый сегмент начинается с загрузки сегментного регистра данных ds, а не с загрузки сегментного регистра cs, необходимо рассмотреть функции DOS при загрузке программы в память.

%Title " Имя EXE -файла программы"

Ideal; Переводит Turbo Assembler в режим Ideal

Model small; Директива описания модели памяти. Вводит упрощенные директивы

; управления сегментами

P486N; Разрешает инструкции старших поколений процессоров. При её

; отсутствии действует по умолчанию P8086. Разрешает использование

; 32 – разрядных регистров для адресации и хранения данных

Stack 256; Резервирует пространство для стека программы (значение в байтах,

; следующее за директивой)

; 1. Здесь следует располагать макроопределения EQU и =

; 2. Вставьте здесь директиву Include " filename"

Dataseg; Начало сегмента инициализированных данных. Допускается также

; расположение здесь и неинициализированных данных, начальные

; значения которых неизвестны на момент запуска программы

; 1. Здесь описываются переменные с помощью директив DB, DW и т. п.

; 2. Здесь опишите все переменные типа Extrn

Codeseg; Начало сегмента кода, т.е. части программы, содержащей команды

; процессора.

; Здесь определите все подпрограммы типа Extrn

Start: mov ax, @data; Точка начала исполнения программы

mov ds, ax; Установка в регистре DS адреса сегмента данных

; Здесь располагается программа, вызовы подпрограмм и т. п.

Exit: mov ax, 4C00h; Функция DOS: Выход из программы

int 21h; Вызов DOS. Останов программы

End Start; Директива конца программы/точки входа. Текст,

; расположенный после этой строки будет игнорироваться ассемблером.

Рис. 1.1. Шаблон структуры программы типа .exe

Образ программы в памяти [Л: 4, 12, 13, 14], представленный на рис. 1.2[4], начинается с префикса программного сегмента PSP (Program Segment Prefix). PSP всегда имеет размер 256 байтов и содержит данные, используемые операционной системой в процессе исполнения программы. Вслед за PSP располагаются сегменты программы. Сегментные регистры es и ds автоматически инициализируются на начало PSP. Это даёт возможность, при сохранении значения одного из регистров, обращаться к PSP в случае необходимости. В указатель команд ip загружается относительный адрес точки входа в программу (операнд директивы END), а в указатель стека sp -смещение конца сегмента стека. Таким образом, после загрузки программы в память, адресуемыми являются все сегменты, кроме сегмента данных. Использование директивы Model, делает доступным ассемблеру несколько служебных идентификаторов, к которым можно обращаться во время работы программы, чтобы получить информацию об адресах используемых сегментов. Например:

@code – 16-разрядный адрес сегмента кода,

@data – 16-разрядный адрес сегмента данных типа near,

@stack – 16-разрядный адрес сегмента стека.

 
 

 

 


Объём памяти, занимаемый программой: (138B-1373)*10h+100h=280h=640 байт

 

Рис. 1.2. Образ программы hello.exe в памяти, загруженной командой Td hello.exe

 

Вот поэтому-то имя предопределённого идентификатора @data и используется в первой паре команд кодового сегмента для загрузки сегмента данных.

Завершение программы означает передачу управления командному процессору DOS – Command.com, который выводит на экран системный запрос в ожидании следующей команды от оператора. Делается это с помощью функции DOS (ah = 4Ch). Эта функция требует единственного параметра – кода возврата, который и помещается программой в регистр al. Если этот код равен нулю, то исполнение программы прошло корректно, в противном случае была допущена ошибка в предшествующих обращениях программы к другим системным функциям DOS.

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

Шаблон программы типа .com приведён на рис. 1.3. При компоновке программы необходимо использовать опцию /t, которая указывает на создание файла .com вместо .exe.

Образ памяти программы типа .com показан на рис. 1.4. После загрузки программы в память все 4 сегментных регистра указывают на начало единственного сегмента – PSP. Указатель стека автоматически инициализируется числом 0FFFEh. Таким образом, независимо от фактического размера программы, ей выделяется 64 Кбайт адресного пространства, нижнюю часть которого занимает стек.

 

%Title " Имя com – файла программы"

Ideal







Дата добавления: 2014-11-10; просмотров: 717. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Виды сухожильных швов После выделения культи сухожилия и эвакуации гематомы приступают к восстановлению целостности сухожилия...

КОНСТРУКЦИЯ КОЛЕСНОЙ ПАРЫ ВАГОНА Тип колёсной пары определяется типом оси и диаметром колес. Согласно ГОСТ 4835-2006* устанавливаются типы колесных пар для грузовых вагонов с осями РУ1Ш и РВ2Ш и колесами диаметром по кругу катания 957 мм. Номинальный диаметр колеса – 950 мм...

Философские школы эпохи эллинизма (неоплатонизм, эпикуреизм, стоицизм, скептицизм). Эпоха эллинизма со времени походов Александра Македонского, в результате которых была образована гигантская империя от Индии на востоке до Греции и Македонии на западе...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия