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



Ссылки на структуры, объединения и смещения элементов в таблице


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


выражение.идентификатор


где "выражение" представляет адрес структуры, объединения или экземпляра таблицы. "Идентификатор" должен быть элементом структуры, объединения или таблицы. Операция точки возвращает смещение элемента в структуре.


В режиме MASM также имеется версия операции точки. Однако ее функция аналогична операции + и имеет следующий синтаксис:


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


Описание содержимого адреса


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


MOV AX,BX ; переместить BX в AX
MOV AX,[BX] ; переместить в AX содержимое по адресу BX


Приведем общий синтаксис, в котором используются квадратные скобки:


[выражение]


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


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


Подразумеваемое сложение


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


MOV AX,5[BX] ; содержимое по адресу BX+5
MOV AX,5[XYZ] ; содержимое по адресу XYZ+5


Неявная операция сложения имеет следующий общий синтаксис:


выражение_1 [выражение_2]
или
выражение_1 (выражение_2)


Получение значения старшего или младшего байта выражения


Для возврата значения старшего или младшего байта выражения можно использовать операции HIGH и LOW. Это обстоятельство может быть полезно, например, в ситуации, когда требуются только старшие 8 бит смещения адреса.


Приведем пример операций HIGH и LOW:


HIGH выражение
LOW выражение


Например:


magic equ 1234h
mov cl,HIGH magic ; cl = 12h
mov cl,LOW magic ; cl = 34h




Задание 16- или 32-разрядных выражений


Если текущим выбранным процессором является процессор 80386 или старше, то Турбо Ассемблер предоставляет две операции, которые определяют, будет выражение интерпретироваться как 16- или 32-разрядное значение. Это операции SMALL и LARGE. Они имеют следующий синтаксис:


SMALL выражение
LARGE выражение


Операция SMALL помечает выражение, как представляющее 16-разрядное значение. Операция LARGE помечает его как 32-разрядное значение. Эти операции особенно важны в программах, при работе которой в операционной среде некоторые сегменты являются 32-битовыми, а другие - 16-битовыми. Например, инструкция:


JMP [DWORD PTR ABC]


представляет собой косвенный переход на содержимое переменной в памяти ABC. Если у вас разрешено использование процессора 80386, то данная инструкция может интерпретироваться либо как дальний переход с использованием сегмента и 16-разрядного смещения, либо как ближний переход по 32-разрядному смещению. Для устранения неоднозначности вы можете использовать операции LARGE и SMALL:


JMP SMALL [DWORD PTR ABC]


Данная инструкция приводит к ассемблированию Турбо Ассемблером инструкции перехода таким образом, что значение, считываемое из ABC, интерпретируется как 16-разрядный сегмент и 16-разрядное смещение. При этом Турбо Ассемблер выполняет косвенный переход типа FAR (дальний переход).


При использовании операций SMALL или LARGE в адресной части смещения, эти операции указывают, что адрес является 32-разрядным, например:


JMP SMALL [LARGE DWORD PTR ABC]


указывает, что переменную в памяти ABC описывает 32-разрядный адрес, но ее содержимое интерпретируется как 16-разрядный сегмент и 16-разрядное смещение.

<<<  Назад
 1  2  3  4  5  6  7 


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

8  В тему

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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