Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 27

Unknown Author

В целом выражения. Я А походки на арифметйчесКйе выражения языка высокого уровня, однако между ними есть и отличия. Наиболее важное отличие заключается в том, что выражения ЯА вычисляются не во время выполнения программы, а во время ее трансляции: встретив в Тексте программы выражение, ассемблер вычисляет его и полученное значение (например, число) записывает в машинную программу. Поэтому, когда программа начнет выполняться, от выражений не останется никаких. следов. В <?йязи с этим: в выраженйях ЯД. можно использовать только такие величины, которые известны на этапе трансляции (например; адреса й типы имен), и ни в кое случае нельзя использовать величины (например, содержимое регистров или ячеек памяти), которые станут известными лишь во время счета программы.

Вообще говоря, в Я А для записи операндов директив и команд достаточно только чисел и имен. Более сложные выражения являются лишь удобной формой записи этих чисел и имен. Например, если имеется переменная X размером в слово и нужно описать переменную ТХ, начальным значением которой является тип (размер) этой переменной, то вместо директивы

тх DB 2 лучше использовать эквивалентную ей директиву

ТХ DB ТУРЕ X

поскольку она более универсальна и ее не надо менять, если изменится тип переменной X.

В ЯА выражения делятся на два класса - на константные и адресные, в зависимости от типа их значений. Если значением выражения является целое число, то оно называется константным выражением, а если значением является адрес, то это адресное выражение. Конечно, адрес - это тоже целое число (порядковый номер ячейки в памяти), но по смыслу адреса отличаются от просто чисел, и в ЯА они рассматриваются как самостоятельный тип данных.

Отметим, что выражений иных типов в ЯА нет, однако имеются объекты (например, строки и имена регистров), которые не относятся ни к константным, ни к адресным выражениям, но которые также используются для записи операндов команд и директив.

По структуре и назначению выражения, константные и адресные, можно разделить на простейшие выражения и операторы. Из простейших выражений строятся любые другие выражения. К простейшим выражениям относятся числа, имена констант, имена переменных и т. п. Термином "оператор” в ЯА принято обозначать то, что мы обычно называем функциями и операциями. Операторы ЯА делятся на одноместные (это аналог функций одного аргумента) и двухместные (это аналог бинарных операций); примером может служить TYPE X или А+1. С помощью операторов из простейших выражений строятся более сложные выражения.

С простейшими выражениями и операторами мы будем знакомиться по ходу дела. Однако уже сейчас укажем старшинство всех операторов ЯА (в порядке убывания; в каждой строке указаны операторы одного старшинства):

I.    (), [], LENGTH, SIZE, WIDTH, MASK

о

^ • •

3.    :

4.    PTR, OFFSET, SEG, TYPE, THIS

5.    HIGH, LOW

6.    одноместные + и -

7.    *, /, MOD, SHL, SHR

8.    двухместные + и -

9.    EQ, NE, LT, LE, GT, GE

10.    NOT

II.    AND

12.    OR, XOR

13.    SHORT, .TYPE