Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЕТОДИЧНІ ВКАЗІВКИ.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
408.58 Кб
Скачать

Лабораторна робота №4

Тема. Робота з масивами.

Мета. Навчитись оголошувати та створювати масиви даних а також вивчити основні команди для роботи з ними.

  1. Команди для роботи з масивами

Для створення масиву використовується оператор DUP:

Array db 10 DUP(?) ;масив з 10 цілих чисел

Також можна визначити послідовність з десяти цілих описуючи та ініціалізуючи їх:

Array db 0,1,2,3,4,5,6,7,8,9

Створення масивів які складаються з складних елементів (стрічки і змінні типу STRUC) потребують додаткових зусиль. Визначення масиву з чотирьох 20-байтових стрічок:

Array db 20 DUP(?),0 ;Array[0]

db 20 DUP(?),0 ;Array[1]

db 20 DUP(?),0 ;Array[2]

db 20 DUP(?),0 ;Array[3]

Чотири змінні записуються в пам'яті послідовно, отже, ці ж чотири 20-байтові стрічки (плюс 1 байт для обмежувача стрічки) можуть розглядатися як окремі змінні чи як структура з чотирьох стрічок, що утворює масив.

Використовуючи дві дерективи LABEL і REPT можна записати:

LABEL Array Byte

REPT 100

db 20 DUP(?),0

ENDM

Перший рядок описує мітку Array типу Byte. Можна використовувати й і нші типи, такі як Word, Dword, Pword, DataPtr, Qword і Tbyte, а також ім'я структури. Директива LABEL вказує асемблеру, як адресувати наступні дані – в пам'яті вона не резервує ніякого простору. В даному прикладі наступні дані є стрічками, які завжди адресуються як одиничні байти. Команда REPT вказує, що треба повторити N (в даному прикладі 100) разів будь-який оператор мови асемблер. Все, що знаходиться між REPT і ENDM повторюється необхідну кількість разів.

Зручним способом є зміна кожен раз опису змінної. Наприклад для створення масиву з 10 цілих елементів і заданню їм значення від 0 до 9 можна використовувати наступний опис:

value=0

LABEL Array Word

REPT 10

dw value

value = value+1

ENDM

В результаті отримаємо масив цілих чисел типу Word із значеннями 0,1,2,3,4,5,6,7,8,9. Всередині REPT дериктива dw опреділяє одне слово в пам'яті, рівне value. Після цього value при наступному проході збільшується на 1. Всі вирази такі як value = value+1 обчислюються під час асемблювання і всі описані дії мають місце при асемблювання а не при виконанні програми. Результат – масив з 10 слів, ініціалізованих послідовними значеннями. Ці команди не генерують коду.

  • Команда LOOP.

Cинтаксис. LOOPcond label.

Семантика. Зменшує вмістиме регістра CX на 1. Якщо CX не рівний 0 і виконується умова cond то управління передається на мітку label.

В даних прикладах команда LOOP використовується для організації простого циклу.

mov CX, N; кількість повторів циклу

cykl: ;оператори

;циклу

next: loop cykl

  • Команда INC.

Cинтаксис. INC dst.

Семантика. Збільшує на 1 значення змінної (регістра, комірки пам’яті) dst.

Доступ до пам’яті здійснюється за допомогою регістрової пари ES:[DI], де DI – зміщення відносно початку масиву.

Якщо ES:[DI] – початкова адреса масиву чисел, то після виконання INC DI

ES:[DI] – другий елемент масиву.

В даних прикладах збільшення індексного регістра DI на 1 здійснюється з метою забезпечення доступу до наступного елементу масиву, індексованого як ES:[DI].

N – кількість чисел в масиві;

ES:[DI] – початкова адреса масиву чисел;