Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
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
Использование выражений и значений идентификаторов



Переопределение сегментной части адресного выражения


Адресные выражения имеют значения, состоящие из сегмента и смещения. Вы можете задавать сегмент явно в виде сегментного регистра. (Если вы задаете его, как значение группы, Турбо Ассемблер определяет, какой сегментный регистр нужно использовать, на основе предполагаемых значение сегментных регистров (ASSUME)). Для изменения сегментной части адресного выражения используется следующий синтаксис:


выражение_1 : выражение_2


Данная операция возвращает адресное выражение, использующее в качестве смещения выражение_2, а в качестве сегмента или значения группы - выражение_1. Например:


VarPtr dd dgroup:memvar ; dgrout - это группа
mov cl,es[si+4] ; переопределение сегмента ES


Получение сегмента и смещения адресного выражения


Для получения сегмента и смещения адресного выражения вы можете использовать операции SEG и OFFSET. Операция SEG возвращаетсегментную часть адресного выражения. Она имеет следующий синтаксис:


SEG выражение


Приведем пример исходного кода:


DATASEG
temp DW 0
CODESEG
mov ax,SEG temp
mov ds,ax
ASSUME ds:SEG temp


Операция OFFSET возвращает смещение адресного выражения и имеет следующий синтаксис:


OFFSET выражение


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


OFFSET BUFFER ; буфер - это адрес в памяти


что не тоже самое, что:




OFFSET DGROUP:BUFFER ; Dgroup - это группа, содержащая сегмент, который содержит BUFFER


(если содержащий BUFFER сегмент не является первым сегментом группы).


Если вы не переопределяете сегмент с помощью операции :, в режиме Ideal адреса автоматически вычисляются относительно любой группы, которой принадлежит сегмент. В режиме MASM это имеет место при использовании упрощенных сегментных директив. В противном случае адреса вычисляются относительно сегмента, в котором находится объект, а не какой-либо группы.


Создание адресного выражения, использующего счетчик инструкций


Для создание адресного выражения, которое указывает на текущий сегмент и счетчик инструкций, можно использовать операцию THIS. В режиме Ideal можно использовать следующий синтаксис:


THIS тип


Синтаксис режима Ideal позволяет вам строить адресное выражение на основе текущего сегмента и счетчика инструкций для заданного типа.


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


THIS выражение


Синтаксис режима MASM работает аналогично режиму Ideal, но для определения типа использует числовое значение выражения. Это следующие значения: 0=UNKNOWN, 1=BYTE, 2=WORD, 4=DWORD, 6=PWORD, 8=QQORD, 10=TBYTE, 0ffffh=NEAR, 0fffeh. Например:


ptr1 LABEL WORD
ptr2 EQU THIS WORD ; аналогично ptr1




Определение характеристик выражения


Иногда (например, в макрокоманде) бывает полезно определить характеристики заданного выражения. Для этого служат операции SYMTYPE и .TYPE.


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


SYMTYPE выражение


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


.TYPE выражение


Операции SYMTYPE и .TYPE возвращают описывающее выражение значение-константу. Это значение разбивается на битовые поля, показанные в следующей таблице:


Битовые поля операций SYMTYPE и .TYPE
БитЗначение
0Выражение является относительным указателем памяти в программе.
1Выражение является относительным указателем на данные в программе.
2Выражение представляет собой значение-константу.
3Выражение использует прямой режим адресации.
4Выражение содержит регистр.
5Идентификатор определен.
7 Выражение содержит идентификатор, определенный извне.



Если биты 2 и 3 равны нулю, то выражение содержит косвенный регистр ([BX]).


Если Турбо Ассемблер не может вычислить выражение, то операция SYMTYPE возвращает соответствующие ошибки. Однако операция .TYPE в этих случаях будет возвращать значение (обычно 0).


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


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

8  В тему

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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