Рассмотрим еще одно возможное сокращение в записи директивыDB.
Довольно часто в директиве приходится указывать одинаковые операнды.
если мы хотим описать байтовый массив Rиз8 элементов сначальным значением 0 для каждого из них, то это можно сделать так:
Так вот, эту директиву можно записать и короче:
Здесь в качестве операнда использована так называемая конструкция повторения, в которой сначала указывается коэффициент повторения, затем - служебное слово DUP (duplicate, копировать), а за ним в круглых скобках - повторяемая величина.
В общем случае эта конструкция имеет следующий вид:
где k - константное выражение с положительным значением, n>=1, р- любой допустимый операнд директивы DB (в частности, это может быть снова конструкция повторения).
Данная запись является сокращениемдля k раз повторенной последовательности указанных в скобках операндов:
'----- kраз ------'
директивы слева эквивалентны директивам справа:
Х DB 2 DUP('аЬ',?,1) X DB 'ab,?,1,'аЬ',?,1
Y DB -7, 3 DUP(0, 2 DUP(?))
Y DB 7,0,?,?,0,?,?,0,?,?
(Тип именХ и Y - BYTE.)
Отметим, что вложенность конструкций DUPможно использоваться для наглядного описания многомерныхмассивов.
Например, директиву
А DB 20 DUP(30 DDP(?))
можно рассматривать как описание байтовойматрицы А размера 20х30, в которой элементырасположены в памяти следующим образом:
- первые 30 байтов -это элементы первой строки матрицы,
- следующие 30 байтов - это элементы второйстроки и т. д.
Директивой DW(define word, определить слово) описываются переменные размером в слово.
Она аналогична директиве DB, поэтому лишь вкратце рассмотрим допустимые виды ее операндов.
Операнд ?
Возможный пример:
А DW ?
По этой директиве ассемблер отводит под переменную А слово памяти, в которое ничего незаписывает, т. е. эта переменная не получает начального значения.
Тип переменной равен 2, т. к. она занимает двабайта.
В ЯА есть стандартная константа с именем WORDи значением 2, поэтому данный факт можно записать так;