Добавил:
vanya.tagaschev@ya.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
21.03.2021
Размер:
26.24 Кб
Скачать

Инициализация массивов

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

SampleArray DW 0, 1, 2, 3, 4

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

Турбо Ассемблер определить блок памяти, инициализированный указанными значениями, с помощью операции DUP. Например:

BlankArray DW 100h DUP (0)

Здесь создается массив BlankArray, состоящий из 255 (десят.) слов, инициализированных значением 0. Аналогично, директива:

ArrayOfa DB 92 DUP (‘A’)

Создает массив из 92 байт, каждый из которых инициализирован символом А.

Инициализация строк символов

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

String DB ‘A’, ‘B’, ‘C’, ‘D’

В турбо Ассемблере в этом случае предусмотрена также удобная сокращенная форма:

String DB ‘ABCD’

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

HelloString DB ‘Привет!’, 0dh, 0ah, ‘$’

Неинициализированные данные

Иногда нет смысла присваивать начальное значение. Предположим, например, что ваша программа считает следующие 10 набранных на клавиатуре символов и записывает их в массив с именем KeyBuffer. Инициализацию этого массива можно выполнить следующим образом:

KeyBuffer DB 10 DUP (0)

Но смысла в этом немного, т.к. начальное значение массива KeyBuffer будут немедленно перезаписаны.

В действительности нужно – это определить переменную в памяти, как неинициализированную. Турбо Ассемблер предусматривает такую возможность с помощью символа «знак вопроса». Он указывает, что вы резервируете ячейку памяти, но не инициализируете её. Например, в последнем примере KeyBuffer можно определить так:

KeyBuffer DB 10 DUP (?)

В данной строке резервируется 10 байт памяти, начиная с метки KeyBuffer, но этим байтам не присвоено никакого конкретного значения.

ЗАДАНИЕ №3

.MODEL Small

.STACK 100h

.DATA

MyByte db ?

MyWord dw 100

.CODE

Start:

; пролог

mov ax,@data

mov ds,ax ; DS = сегмент .DATA

mov al, 99

mov MyByte, al

;эпилог

mov ax,4C00h

int 21h ; Выходим из программы

END Start

Вывод: Произошло знакомство с архитектурой процессора, получение навыков работы с отладчиком.

Соседние файлы в папке Тамьяров А. В.