
- •Методичні вказівки
- •"Системне програмування та операційні системи”
- •Лабораторна робота №1
- •Загальні відомості
- •Компілятор Turbo Assembler
- •Компонування програми
- •Складові частини програми
- •Приклад побудови програми
- •Завдання до лабораторної роботи №1
- •Лабораторна робота №2
- •Програмна модель пристрою fpu
- •Варіанти завдань до лабораторної роботи №2
- •Лабораторна робота №3
- •Опис логічних операцій мови програмування асемблер
- •Приклад програми використання логічних операцій
- •Варіанти завдань до виконання лабораторної роботи №3
- •Лабораторна робота №4
- •Команди для роботи з масивами
- •Приклад програми для роботи з масивами
- •Варіанти завдань до виконання лабораторної роботи №6
- •Лабораторна робота №5
- •Команди для роботи зі стрічками
- •Приклад програми для роботи із стрічками
- •Варіанти завдань до виконання лабораторної роботи №5
- •Контрольні запитання
- •Порядок оформлення звітів до виконання лабораторних робіт
- •Література
- •Навчальне видання
- •« Системне програмування та операційні системи »
Лабораторна робота №4
Тема. Робота з масивами.
Мета. Навчитись оголошувати та створювати масиви даних а також вивчити основні команди для роботи з ними.
Команди для роботи з масивами
Для створення масиву використовується оператор 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] – початкова адреса масиву чисел;