Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_asm_06_3495.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
178.18 Кб
Скачать

2.2.5. Псевдооператоры определения данных

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

DB (Define Byte – определить байт),

DW (Define Word – определить слово),

DD (Define Double Word – определить двойное слово).

Они различаются в основном по объему резервируемой памяти. Псевдооператор DB резервирует 8-битовые байты, DW – 2-байтовые слова, а DD – 4-байтовые двой­ные слова.

Псевдооператоры имеют следующий формат:

[имя] DB выражение [,...]

[имя] DU выражение [,...]

[имя] DD выражение [,...]

Операнд выражение может принимать одну из нескольких форм.

Выражение может быть константой.

VD DB 127D ; десятичный формат

VD1 DB 127 ; по умолчанию

VH DB 0FFFH ; шестнадцатиричный (должен начинаться с цифры)

VB DB 1100B ; двоичный

VO DB 253O ; восьмеричный

VO1 DB 253Q ; восьмеричный

Можно вводить и отрицательные числа. В случае десятичного чис­ла перед ним достаточно поставить знак минус (например, –32). Если число двоич­ное или шестнадцатиричное, то его надо вводить в дополнительном коде.

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

B_TABLE DB 0,0,0,8 ; Таблица байтов

W_TABLE DW 0,1000,500,0 ; Таблица слов

Обратите внимание на то, что первые три элемента таблицы B_TABLE имеют одинаковые значения. У Ассем­блера есть операция DUP (duplicate – дублировать), которая позволяет повторять операнды, не набирая их каждый раз заново. С помощью операции DUP определе­ние таблицы B_TABLE можно записать:

B_TABLE DB 3 DUP(0),8 ; Таблица байтов

При определении переменной без присваивания ей начального значения в поле выражение указывается вопросительный знак (?). Например, следующий оператор резервирует байт, но не заносят в него какое-либо значение:

TEMP DB ?

Можно зарезервировать ячейки памяти для целой таблицы. Например, оператор

TABLE DB 12 DUP(?) ; Таблица байтов

зарезервирует 12 байт памяти.

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

MSG DB 'Ошибка'

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

Если метка находится в том же сегменте, что и команда, которая на нее ссылается, то достаточно указать только смещение. Так как смещение имеет длину 16 битов, то для его хранения надо использовать оператор DW. Например, оператор

L_N DW L1

присвоит 16-битовому смещению метки L1 имя L_N. Содержащую смещение переменную называют указателем.

Если метка и команда, которая на нее ссылается, находятся в разных сегментах, то кроме смещения микропроцессору 8088 надо знать еще и номер блока метки. Оба этих компонента адреса можно получить с помощью оператора DD. Например, оператор

L_F DD L1

присвоит 16-битовое смещение и 16-битовый номер блока метки L1 32-битовой переменной L_F.

Переменную, содержащую оба компонента адреса, называют вектором.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]