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



Унарная операция MASK


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


Значения, возвращаемые MASK
ВыражениеЗначение
MASK имя_записи Возвращает маску, в которой биты, резервированные для представления битовых полей в определении записи, равны 1, а остальные равны 0.
MASK имя_поля_записиВозвращает маску, в которой биты, резервированные для поля в определении записи, равны 1, а остальные равны 0.
MASK имя_перечисленияВозвращает маску, в которой биты, резервированные для представления максимального значения в определении перечисления, равны 1, а остальные равны 0.



Общие арифметические операции


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


Простые арифметические операции


Турбо Ассемблер поддерживает простые арифметические операции. которые приведены в следующей таблице:


Простые арифметические операции
ВыражениеЗначение
+выражениеВыражение.
-выражениеОтрицание выражения.
выражение_1 + выражение_2Выражение_1 плюс выражение_2.
выражение_1 - выражение_2Выражение_1 минус выражение_2.
выражение_1 * выражение_2Выражение_1, умноженное на выражение_2.
выражение_1 / выражение_2Выражение_1, деленное на выражение_2 (используются целые числа со знаком). Выражение_2 не может быть нулевым или превышать по размеру 16 бит.
выражение_1 MOD выражение_2Остаток от деления выражения_1 на выражение_2. Применяются теже правила, что и при делении.



Логические арифметические операции


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


Логические арифметические операции
ВыражениеЗначение
NOT выражениеПоразрядное дополнение выражения.
выражение_1 AND выражение_2Поразрядная операция "И".
выражение_1 OR выражение_2Поразрядная операция "ИЛИ".
выражение_1 XOR выражение_2Поразрядная операция "исключающее ИЛИ".



Поразрядные операции сдвига


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


Логические операции сдвига
ВыражениеЗначение
выражение_1 SHL выражение_2Выражение_1 сдвигается влево на число бит, заданных выражением_2 (при отрицательном значении выражения_2 выполняется сдвиг вправо).
выражение_1 SHR выражение_2Выражение_1 сдвигается вправо на число бит, заданных выражением_2 (при отрицательном значении выражения_2 выполняется сдвиг влево).



Операции сравнения


Операции сравнения позволяют сравнить два выражение и проверить их равенство или неравенство или что одно из них больше или меньше другого. Эти операции равны -1, если условие истинно (True), или 0 в противном случае. Следующая таблица показывает, как можно использовать эти операции.


Операции сравнения
ВыражениеЗначение
выражение_1 EQ выражение_2-1, если выражение_1 равно выражению_2, в противном случае 0.
выражение_1 NE выражение_2-1, если выражение_ 1 не равно выражению_2, в противном случае 0.
выражение_1 GT выражение_2-1, если выражение_1 больше выражения_2, в противном случае 0.
выражение_1 GE выражение_2-1, если выражение_1 больше или равно выражению_2, в противном случае 0.
выражение_1 LT выражение_2-1, если выражение_1 меньше выражения_2, в противном случае 0.
выражение_1 LE выражение_2-1, если выражение_1 меньше или равно выражения_2, в противном случае 0.



Операции EQ или NE интерпретируют выражения, как числа без знака. Например, -1 EQ 0ffffh имеет значение -1 (если только вы не выбрали процессор 80386 или не используете режим Ideal; в последнем случае значение -1 имеет выражение -1 EQ 0ffffffffh).


Операции Gt, GE, LT и LE интерпретируют выражения, как числа со знаком. Например, 1 GE -1 имеет значение -1, но 1 GE 0ffffh имеет значение 0.


Задание адресного подтипа выражения


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


Операции переопределения типа
ВыражениеЗначение
выражение_1 PTR выражение_2Преобразует выражение_2 к типу, определяемому выражением_1. При этом 0=UNKNOWN, 1=BYTE, 2=WORD, 4=DWORD, 6=PWORD, 8=QWORD, 10=TBYTE, 0ffffh=NEAR, 0fffeh=FAR, все прочие=UNKNOWN (только для режима MASM).
тип PTR выражение_2 или тип выражениеПреобразует выражение к заданному адресному подтипу (только для режима Ideal).
тип LOW выражениеПреобразует выражение к заданному адресному подтипу. Описанный тип должен быть меньше по размеру, чем ип выражения ( только для режима Ideal).
тип HIGH выражениеПреобразует выражение к заданному адресному подтипу. Описанный тип должен быть меньше по размеру, чем тип выражения. Возвращаемый адрес настраивается на старшую часть объекта, описанного адресным выражением ( только для режима Ideal).



Приведем некоторые примеры:


IDEAL
big DD 12345678h
MOV ax,[WORD big] ; ax = 5678h
MOV al,[BYTE PTR big] ; al = 78h
MOV ax,[WORD HIGH big] ; ax = 1234h
MOV ax,[WORD LOW big] ; ax = 5678h
MOV al,[BYTE LOW WORD HIGH big] ; al = третьему байту big = 34h
MASM:
MOV ax,2 PTR big ; ax = 5678h
MOV ax,WORD PTR big ; ax = 5678h (WORD имеет значение 2)




Получение типа выражения


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


TYPE выражение


Операция TYPE возвращает размер объекта, описанный адресным выражением:


Значение TYPE
ВыражениеЗначение
byte1
word2
dword4
pword6
qword8
tbyte 10
short0ffffh
near0ffffh
far0fffeh
структура/объединениеРазмер экземпляра структуры или объединения.
таблицаРазмер экземпляра таблицы.



Приведем пример:


avar = 5
darray dd 10 dup (1)
x struc
dw ?
dt ?
ends
fp label far
tavar = TYPE avar ; = 0
tbvar = TYPE davar ; = 4
tx = TYPE x ; = 12
tfp = TYPE fp ; = 0FFFFh




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


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

8  В тему

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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