Практическое занятие № 18
Работа с массивами
Практически любая программа кроме машинных команд содержит также какие-то данные. Например, числа, текстовые строчки, идентификаторы, различные ресурсы и т.д. Данные могут быть как константами, не меняющими своё значение во время выполнения программы, так и переменными, в которых хранятся всякие промежуточные результаты.
Прежде всего нужно научиться объявлять данные в программе. Для этого в ассемблере существуют директивы объявления данных.
|
Размер |
Объявление |
Резервирование |
|
1 |
db |
rb |
|
2 |
dw |
rw |
|
4 |
dd |
rd |
|
6 |
dp |
rp |
|
8 |
dq |
rq |
|
10 |
dt |
rt |
|
N |
file |
Самыми полезными являются директивы db, dw и dd.
Синтаксис объявления данных
Объявлять данные очень просто — например, чтобы объявить байт cо значением 5 достаточно написать:
|
x db 5 |
где x — название переменной или константы, db — директива объявления байта, а 5 — значение. С помощью названия в программе можно будет обращаться к ячейке памяти, содержащей байт. Вообще, название не обязательно и можно его не писать, если оно не требуется:
|
db 5 |
Если запустить программу в отладчике Turbo Debugger, то в окне дампа можно увидеть результат работы директивы db:

Объявление последовательностей (массивов)
Иногда в программе требуется объявить массив, то есть несколько переменных одинакового размера, расположенных в памяти друг за другом. Например, чтобы объявить массив из 5 двухбайтных чисел можно написать:
|
array1 dw 1,2,3,4,5 |
где array1 — название массива, 1,2,3,4,5 — значения элементов. Вместо array1 компилятор FASM будет подставлять в программу адрес начала массива, то есть адрес первого элемента.
Дамп памяти будет выглядеть следующим образом (обратите внимание, младший байт каждого слова расположен перед старшим):

Для объявления повторяющихся элементов можно использовать такую запись (объявляем массив из 5 байтов, равных 1):
|
array2 db 5 dup(1) |

Объявление строк
Строка представляет собой массив байтов-символов и записывается в одинарных кавычках:
|
str1 db 'Hello' |

Для обозначения конца строки используется специальный символ. Обычно это нулевой байт, но для функций DOS используется символ ’$’.
|
str2 db 'Hello',0 ;Обычно так str3 db 'Hello$' ;Для DOS |

Резервирование данных.
Можно объявлять переменные, не имеющие определённого начального значения. Такие переменные называются неинициализированными. Например, их можно использовать в программе для хранения временного или промежуточного значения. Фактически под переменную просто резервируется место в памяти. Объявлять такие переменные можно с помощью директив db, dw, dd, … и знака вопроса вместо значения.
|
x1 db ? x2 dw ?,?,? x3 dd 10 dup(?) |
Задание
1. Написать команду объявления последовательности данных 3,5,7,9,1
2. Объявить массив, состоящий из 10 байтов, с повторяющейся 2-кой.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.