Практическая работа специальности 09.02.01.

  • docx
  • 28.11.2022
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала ПЗ18_Работа с массивами.docx

Практическое занятие № 18

Работа с массивами

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

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

Размер
(в байтах)

Объявление

Резервирование

1

db

rb

2

dw
du

rw

4

dd

rd

6

dp
df

rp
rf

8

dq

rq

10

dt

rt

N

file

 

Самыми полезными являются директивы db, dw и dd.

Синтаксис объявления данных

Объявлять данные очень просто — например, чтобы объявить байт cо значением 5 достаточно написать:

x db 5

где x — название переменной или константы, db — директива объявления байта, а 5 — значение. С помощью названия в программе можно будет обращаться к ячейке памяти, содержащей байт. Вообще, название не обязательно и можно его не писать, если оно не требуется:

db 5

Если запустить программу в отладчике Turbo Debugger, то в окне дампа можно увидеть результат работы директивы db:

http://asmworld.ru/content/course/005/shot00.png

Объявление последовательностей (массивов)

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

array1 dw 1,2,3,4,5

где array1 — название массива, 1,2,3,4,5 — значения элементов. Вместо array1 компилятор FASM будет подставлять в программу адрес начала массива, то есть адрес первого элемента.

Дамп памяти будет выглядеть следующим образом (обратите внимание, младший байт каждого слова расположен перед старшим):

http://asmworld.ru/content/course/005/shot01.png

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

array2 db 5 dup(1)

http://asmworld.ru/content/course/005/shot02.png

 

Объявление строк

Строка представляет собой массив байтов-символов и записывается в одинарных кавычках:

str1 db 'Hello'

http://asmworld.ru/content/course/005/shot03.png

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

str2 db 'Hello',0    ;Обычно так

str3 db 'Hello$'     ;Для DOS

http://asmworld.ru/content/course/005/shot04.png

 

Резервирование данных.

Можно объявлять переменные, не имеющие определённого начального значения. Такие переменные называются неинициализированными. Например, их можно использовать в программе для хранения временного или промежуточного значения. Фактически под переменную просто резервируется место в памяти. Объявлять такие переменные можно с помощью директив db, dw, dd, … и знака вопроса вместо значения.

x1 db ?

x2 dw ?,?,?

x3 dd 10 dup(?)

Задание

1. Написать команду объявления последовательности данных 3,5,7,9,1

2.  Объявить массив, состоящий из 10 байтов, с повторяющейся 2-кой.