Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эрни Каспер Программирование на языке Ассемблер...doc
Скачиваний:
141
Добавлен:
09.11.2019
Размер:
954.88 Кб
Скачать

2.3.Директивы резервирования памяти и инициализации данных

Директива резервирования памяти позволяет определить адрес информации для имени, указанного в поле метки этой директивы: .DS размер

Синонимами этой директивы являются DEFS и RMB. По директиве резервирования памяти значение счетчика текущего адреса в транслируе­мой секции увеличивается на число, указанное в операнде директивы, независимо от записи имени в поле метки. В битовой секции директива резервирует адреса для битов, а в остальных — для байтов. Инициализа­ция данных при этом не производится. В резервируемую область не записываются никакие коды. Регистровые и битовые секции отличаются от секций кода и данных тем, что в них можно только отводить адресное пространство для данных, но нельзя инициализировать содержимое ОЗУ. Инициализация данных в битовой и регистровой секциях должна произ­водиться программой сразу после включения микроконтроллера.

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

.RADIX основание

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

2 или В (двоичная система),

8 или О или Q (восьмеричная система),

10 или D (десятичная система),

16 или Н (шестнадцатеричная система).

По умолчанию в этой директиве происходит возврат к десятичной сис­теме. Следует отметить, что если задано основание системы счисления 16, то не существует способа описания десятичного или двоичного числа, поскольку суффиксы D и В являются допустимыми шестнадцатеричными Цифрами.

Директива инициализации данных байтового формата имеет вид

.DB значение

Синонимами этой директивы являются DEFB, BYTE, FCB и STRING. Операндом директивы может быть как одно значение, так и список значений, разделенных запятыми. Каждому элементу списка отводится один байт. При отсутствии операнда инициализируется одно нулевое значение. Допускается использование числового или символьного формата данных. Строки символов следует заключать в кавычки. Каждому символу строки отводится один байт (ограничители не включаются в объектный файл). Для включения кавычки в состав строки в качестве ограничителя следует использовать другой вид кавычек. При инициализации символов в машинном коде программы записываются числа, соответствующие загруженной в системе MS DOS кодовой странице.

Эта директива позволяет программисту записывать в любые места секции кода команды в машинных кодах. Таким образом, транслятор позволяет при желании вернуться к самому древнему методу программи­рования.

Для инициализации массива данных, имеющих одинаковые значения, можно использовать директиву

.BLKB размер, значение

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

Существуют специальные директивы для инициализации данных символьного формата. Директива

.ASCII строка

инициализирует коды символов ASCII, за исключением ограничителей строки. Если в строке появляется символ вертикальной черты (шестна-дцатеричное 7С), то этот и последующие символы не инициализируются. Еще одна директива инициализации данных символьного формата

.DC строка

использует в качестве ограничителей первый символ строки и следующий совпавший с ним. Инициализируются только символы, расположенные между ограничителями, притом в старший бит кода последнего инициа­лизируемого символа записывается 1. Синонимом этой директивы явля­ется FCC.

Для ввода некоторых неотображаемых символов можно использовать их символическое представление при помощи пары букв: "CR" или 'CR1 — carriage return (возврат каретки) "LF" или 'LF' — line feed (перевод строки)

"SP" или 'SP' — space (пробел)

"НТ" или 'НТ' — horizontal tab (горизонтальная табуляция)

"NL" или 'NL' — null (нуль)

Для того чтобы в операндах директив инициализации можно было исполь­зовать приведенные обозначения неотображаемых символов, используется директива

.TWOCHAR ON

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

.TWOCHAR OFF

Чтобы отличать символ от числа, когда-то было принято записывать еди­ницу в старший бит каждого кода символа при инициализации символьных данных директивами ASCII или DB. Для включения и выключения режима записи 1 в седьмой бит кода символа используются директивы

.BIT7 ON

.BIT7 OFF

По умолчанию режим записи 1 в седьмой бит кода символа выключен.

Существуют директивы инициализации данных, состоящих из двух байтов (слов). Инициализация отдельных значений или списков значений осуществляется только в числовом формате директивой

.DW значение

Синонимами этой директивы являются DEFW, WORD и FDB. Для ини­циализации массива одинаковых значений в формате слова используется директива

.BLKW размер, значение

Она инициализирует заданное количество 16-разрядных слов с заданным значением. По умолчанию инициализируются значения нуль.

Поскольку система команд i8051 не работает с данными в формате слова, то расположение старших и младших байтов может задаваться программистом произвольно. Для работавших с системой команд IBM PC привычно записывать старший байт по старшему адресу, притом адрес младшего байта должен быть четным. Приведенные директивы инициа­лизации данных в формате слова располагают старший байт по младшему адресу без соблюдения четности адресов.

Существуют также директивы инициализации числовых данных в форматах LONG, FLOAT и DOUBLE, но для микроконтроллеров в подавляющем большинстве случаев использование таких форматов является экзотикой.