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

Unknown Author

Отметим, что имя, указанное в начале директивы, именует только первый из этих байтов. В связи с этим тип имени М равен 1: TYPE М = BYTE. Остальные же байты остаются безымянными. Для ссылок на них в ЯА используются выражения вида М+k, где к - целое число: М+1 - для ссылки на байт со значением FE, М+2 - для ссылки на следующий байт и т. д. Особо подчеркнем, что запись

М+1 не следует понимать как сложение содержимого ячейки с именем М ( т. е. числа 2) с числом 1. В ЯА запись вида <имя>±к означает, что к адресу указанного имени надо прибавить (или отнять) число к, в результате чего получится некоторый новый адрес, и вот уже по этому адресу и осуществляется доступ к памяти. Таким образом, данная запись означает сложение/вычитание адресов.

Операнд - строка

Возможно еще одно сокращение в директиве DB: если в ней несколько соседних операндов - символы, то их можно объединить в одну строку. Например, следующие две директивы эквивалентны:

SDB'a','b','c'    SDB 'abc'

Отметим, что и в этом случае тип имени равен 1 (TYPE S = BYTE), т. к. любая из этих директив является сокращением следующих трех директив:

s DB 'а'

DB 'Ь'

DB 'с'

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

Вопрос о том, объединять соседние символы в одну строку или нет, а если объединять, то какие именно, решает сам автор программы. Например, нашу директиву можно записать и так:

S DB 'ab','c' или S DB 'а','Ьс'

Операнд - конструкция повторения DUP

Рассмотрим еще одно возможное сокращение в записи директивы DB. Довольно часто в директиве приходится указывать одинаковые операнды. Например, если мы хотим описать байтовый массив R из 8 элементов с начальным значением 0 для каждого из них, то это можно сделать так:

R DB О,О,О,О,О,О,О,О

Так вот, эту директиву можно записать и короче:

Б DB 8 DUP(0)

Здесь в качестве операнда использована так называемая конструкция повторения, в которой сначала указывается коэффициент повторения, затем - служебное слово DUP (duplicate, копировать), а за ним в круглых скобках - повторяемая величина.

В общем случае эта конструкция имеет следующий вид:

k DUP (plt р2,    рд)

где к - константное выражение с положительным значением, п>=1, р^ - любой допустимый операнд директивы DB (в частности, это может быть снова кон-

струкция повторения). Данная запись является сокращением для к раз повторенной последовательности указанных в скобках операндов:

-----к раз------

Например, директивы слева эквивалентны директивам справа

X DB 2 DUP('ab',?,1)

У DB -7, 3 DUP(0, 2 DUP(?))

(Тип имен X и Y - BYTE.)

Отметим, что вложенность конструкций DUP можно использоваться для наглядного описания многомерных массивов. Например, директиву

A DB 20 DUP(30 DUP(?))

можно рассматривать как описание байтовой матрицы А размера 20x30, в которой элементы расположены в памяти следующим образом: первые 30 байтов -это элементы первой строки матрицы, следующие 30 байтов - это элементы второй строки и т. д.

232. Директива DW

Директивой DW (define word, определить слово) описываются переменные размером в слово. Она анаюгична директиве DB, поэтому лишь вкратце рассмотрим допустимые виды ее операндов.