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

Unknown Author

A DW $ ; эквивалентно A DW 10Oh В DW $ ; эквивалентно В DW 102h

Чаще всего счетчик размещения используется для вычисления размера памяти, занимаемой каким-то массивом, например:

X DW 40 DUP(?)

SIZE_X EQU $-Х    ; SIZE_X = 80

Здесь $ обозначает адрес первого байта за массивом X, из этого адреса и вычитается начальный адрес массива.

Среди операторов, значением которых являются адреса, пока отметим лишь операторы сложения и вычитания (а - адресное выражение, к - константное):

•    сложение адреса с числом: а+k, к+а (значением такого выражения является адрес, полученный прибавлением к адресу а числа к).

•    вычитание константы из адреса: а-k (значением является адрес а, уменьшенный на величину к).

Адресные выражения вида <имя>±<пелое> используются для ссылок на безымянные ячейки памяти (как правило, элементов массивов). Например, если имеются описания

9

A DB 0,1,2,3 В DB 4

то именованными оказываются только байты со значениями 0 и 4, а остальные элементы массива А оказываются безымянными, поэтому к ним нельзя обратиться по имени. Для доступа к таким безымянным ячейкам в ЯА и используются адресные выражения указанного вида. Например, сослаться на байт со значением 3 можно с помощью выражения А+3 или В-1.

Отметим, что в ЯА запрещено вычитание адреса из числа, не допускается сложение, умножение и деление адресов - все это бессмысленные операции. Однако допускается вычитание адресов, но в этом случае, как мы уже знаем, результатом будет не адрес, а константа.

И еще одно замечание. В ЯА указывать адреса в явном, цифровом, виде нельзя. Если указано число, то оно всегда воспринимается как константа, а не адрес. Если же все-таки надо указать адрес в явном виде, то это делается специальным образом, о чем будет рассказано в гл. 7.

ПЕРЕСЫЛКИ. АРИФМЕТИЧЕСКИЕ КОМАНДЫ

Мы переходим к изучению команд ПК и способов их записи в ЯА. В данной главе будут рассмотрены команды пересылки и арифметические команды.

3.1. Обозначение операндов команд

При описании команд нам придется указывать, какие операнды в них допустимы, а какие - нет. Для сокращения подобного рода указаний мы введем сейчас обозначения, которыми затем будем пользоваться при описании команд.

Местонахождение операнда

Обозначение

Запись в ЯЛ

в команде

i8, il6, i32

константное выражение

в регистре общего назначения

r8, rl6

имя регистра

в сегментном регистре

sr

CS, DS, SS, ES

в ячейке памяти

m8, ml6, m32

адресное выражение

Непосредственные операнды (т. е. задаваемые в самой команде) мы будем обозначать буквой i (от immediate, непосредственный), указывая за ней, сколько разрядов - 8 (байт), 16 (слово) или 32 (двойное слово) - отводится на него в команде. При этом отметим: запись il6 не означает, что операнд не может быть небольшим числом, в качестве il6 можно указать и операнд 0, и операнд 32000, лишь бы он занимал не более 16 разрядов. В ЯА непосредственные операнды записываются в виде константных выражений.

Регистры будем обозначать буквой г (от register), указывая за ней требуемый размер регистра: г8 - это байтовые регистры (АН, AL, ВН и т. п.), а г16 - регистры размером в слово (АХ, ВХ, SI и т. п.). При этом буквой г мы обозначаем только регистры общего назначения, сегментные же регистры мы будем обозначать как sr.