Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


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



Директива ENDS


Вы можете использовать директиву ENDS для закрытия сегмента, после чего данные в него больше включаться не будут. Директиву ENDS следует использовать для закрытия любого сегмента, открытого по директиве SEGMENT. Сегменты, открытые с помощью упрощенных директив определения сегментов, не требуют директивы ENDS.


Директива ENDS имеет следующий синтаксис:


ENDS [имя]


В режиме MASM вы можете использовать следующий синтаксис:


имя ENDS


где "имя" задает имя сегмента, который должен быть закрыт. Если имя не согласуется с именем текущего открытого сегмента, Турбо Ассемблер будет выводить сообщение об ошибке. Если имя не задается, Турбо Ассемблер подразумевает текущий сегмент.


Директива GROUP


Директива GROUP может использоваться для присваивания сегментов группам. Группы позволяют вам для доступа ко всем сегментам группы задавать один сегмент.


В режиме Ideal директива GROUP имеет следующий синтаксис:


GROUP имя имя_сегмента [, имя_сегмента.]


В режиме MASM вы можете использовать следующий синтаксис:


имя GROUP имя_сегмента [, имя_сегмента.]


где "имя" представляет собой имя группы, а "имя_сегмента" - это имя сегмента, которое вы хотите присвоить группе.


Директива ASSUME


Если вы хотите получить доступ к данным сегмента, сегментный регистр должен загружаться корректным значением сегмента. Часто это нужно делать вам самим. Например, для загрузки в регистр DS адреса текущего сегмента данных дальнего типа вы можете использовать команды:


MOV AX,@fardata
MOV DS,AX


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


Чтобы указать Турбо Ассемблеру, что нужно связать сегментный регистр с именем сегмента или группы, используйте директиву ASSUME. Это позволяет Турбо Ассемблеру быть "достаточно проницательным" и использовать при доступе к данным конкретный сегмент.


Фактически, Турбо Ассемблер использует также информацию о связи между сегментным регистром и именем сегмента также и для других целей: в режиме MASM значение, которое подразумевается для регистра CS, используется для определения сегмента или группы, к которому принадлежит метка. Таким образом, регистр CS должен корректно задаваться в директиве ASSUME, в противном случае Турбо Ассемблер при каждом определении метки или процедуры будет сообщать об ошибке.


Директива ASSUME имеет следующий синтаксис:


ASSUME сегм_регистр : выражение [, сегм_регистр : выражение]


или
ASSUME nothing


где "сегм_регистр" - это один из регистров CS, DS, ES или SS. Если вы задаете процессор 80386 или 80486, то можете использовать регистры FS и GS. "Выражение" может быть любым выражением, при вычислении которого получается имя сегмента или группы. В противном случае может использоваться ключевое слово NOTHING. Это ключевое слово отменяет связь между сегментным регистром и любым сегментом или именем группы.


Директива ASSUME NOTHING отменяет связь между всеми сегментными регистрами и сегментом или именем группы.


Вы можете использовать директиву ASSUME при модификации сегментного регистра или в начале процедуры для задания в этой точке предположений о сегментных регистрах. На практике ASSUME используется обычно в начале модуля и иногда внутри него. Если вы используете оператор MODEL, то Турбо Ассемблер назначает директиву ASSUME по умолчанию.


Если вы не задаете в директиве ASSUME значение, то ранее заданное в ней значение не изменяется.


Например, в следующем фрагменте программы показано, как можно загрузить текущий инициализированный сегмент данных дальнего типа в регистр DS, обратиться через этот регистр к памяти и восстановить регистр DS в значение сегмента данных:


MOV AX,@fardata
MOV DS,AX
ASSUME DS:@fardata:
MOV BX,<переменная_данных_дальнего_типа>
MOV AX,@data
MOV DS,AX
ASSUME DS:@data


<<<  НазадВперед  >>>
 1  2  3  4  5  6  7 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Объектно-ориентированное программирование

Использование выражений и значений идентификаторов

Директивы выбора процессора

Определение типов данных

Задание и использование счетчика адреса

Описание процедур

Управление областью действия идентификаторов

Определение данных

Расширенные инструкции

Использование макрокоманд

Использование условных директив

Интерфейс с компоновщиком

Генерация листинга

Интерфейс Турбо Ассемблера и Borland C++

Интерфейс Турбо Ассемблера с Турбо Паскалем

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь