- •Інженерія програмного забезпечення
- •Загальні вимоги до програмного забезпечення
- •Процеси життєвого циклу програмного забезпечення
- •Керування процесом проектування програмного забезпечення
- •Прототипування програмних систем.
- •Архітектурне проектування програмних систем
- •Архітектура розподілених систем
- •Проектування систем реального часу
- •Об‘єктно-орієнтоване проектування програмних систем.
- •Візуальне проектування об‘єктно-орієнтованих систем
- •Динамічні моделі об‘єктно-орієнтованих систем
- •Моделі реалізації об‘єктно-орієнтованих програмних систем
- •Проектування інтерфейсу користувача
- •Тестування програм та систем
- •Структурне тестування програмного забезпечення.
- •Методи та засоби автоматизації тестування програмного забезпення
- •Системне програмування
- •Дати оцінку основним правилам автоматичного перетворення типів.
- •Розкрити сутність адресної арифметики при роботі з вказівниками.
- •Обґрунтувати алгоритм та представити програмний код для реалізації програми, що сумує з 0 по 3 біт першого числа та з 3 по 6 біт другого числа.
- •Розкрийте поняття програмна модель мікропроцесора.
- •Проаналізувати типи даних в мові асемблер.
- •Проаналізувати особливості роботи із масивами в мові асемблер.
- •Проаналізувати структуру програми мовами програмування з родини асемблерів(синтаксис ассемблера).
- •Організувати на асемблері ехе-програму, щоб перекодувати символи строки шляхом додавання до літери строки кодів символів таблиці(Код мовою Asembler).
- •Організувати ехе-програму , щоб перекодувати символи з однієї таблиці в іншу(код мовою асемблера).
- •Організація баз даних
- •Моделі даних: ієрархічна, мережева, реляційна, об‘єктно-реляційна, нереляційна.
- •NoSql або постреляційні бази даних
- •Реляційна модель даних. Операції реляційної алгебри.
- •Нормалізація відношень при проектування реляційної моделі.
- •Поняття первинних ключів. Роль функціональних залежностей. Зовнішні та батьківські ключі.
- •Нормалізація відношень: перша, друга та третя нормальні форми
- •Визначення другої нормальної форми. Правило приведення. Повна функціональна залежність.
- •Визначення третьої нормальної форми. Правило приведення. Транзитивна залежність.
- •Семантичне моделювання та когнітивний аспект.
- •Проектування баз даних: концептуальне, логічне, фізичне
- •Модель «сутність-зв‘язок» або er-модель
- •Нормалізація даних в er-моделі
- •Case-засоби проектування баз даних.
- •Мова маніпулювання даними sql. Побудова запитів.
- •Адміністрування даних. Засоби підтримки цілісності баз даних
Проаналізувати особливості роботи із масивами в мові асемблер.
Для початку дамо формальне визначення, МАСИВ - цк структурований тип даних, що містить у собі деяку кількість елементів одного типу.
Спеціалізованих засобів для опису масивів в програмах асемблера немає, при необхіності викорстовувати масиви в програмі необхіно їх моделювати одним із наступних варіантів:
Переліченням елементів масиву в поле операндів однієї із директив опису даних. При переліку елементи розділяються комами. Наприклад:
Масив з 5 елементів, розмір кожного 4 байти
mas dd 1, 2, 3, 4, 5
За допомогою оперетора повторення dup
Масив з 5 нульових елеменів
Mas dw 5 dup (0)
Даний метод використовується для резервування пам'яті з ціллю розміщення та ініціалізації елементів масиву.
Використовуючи директиви label, rept. Ці директиви можуть значно облегшити описання великих масивів у пам'яті та підвищити логічність такого опису. Директива rept відноситься до макрозасобів мови асемблера і викликає повторення вказану кількість разів рядків, укладених між директивою та рядком endm. Наприклад, визначимо масив байт області пам'яті, позначеної ідентифікатором mas_b. У цьому випадку директива label визначає символічне ім'я mas_b, аналогічно до того, як це роблять директиви резервування та ініціалізації пам'яті. Перевага директиви label в тому, що вона не резервує пам'ять, а лише визначає характеристики об'єкта. В даному випадку об'єкт - це комірка пам'яті. Використовуючи кілька директив label, записаних одна за одною, можна привласнити одній і тій же області пам'яті різні імена та різний тип, що й зроблено у наступному фрагменті:
...
n=0
...
mas_b label byte
mas_w label word
rept 4
dw 0f1f0h
endm
В результаті в пам'яті буде створено послідовність чотирьох слів f1f0. Цю послідовність можна трактувати як масив байт або слів залежно від того, яке ім'я області ми будемо використовувати в програмі mas_b або mas_w.
Використання циклу для ініціалізації значення пам'яті, яку можна буде згодом трактувати як масив.
Доступ до елементів масиву
Працюючи з масивами необхідно чітко уявляти, що це елементи масиву розміщуються у пам'яті комп'ютера послідовно.
Саме собою таке розташування нічого не говорить про призначення та порядок використання цих елементів. І тільки програміст за допомогою складеного ним алгоритму обробки визначає, як потрібно трактувати цю послідовність байт, що становлять масив. Так, ту саму область пам'яті можна трактувати як одномірний масив, і одночасно ті ж дані можуть трактуватися як двомірний масив. Все залежить лише від алгоритму обробки цих даних у конкретній програмі. Самі собою дані не несуть жодної інформації про свій “смисловий”, чи логічний, тип. Пам'ятайте про цей важливий момент.
Ці міркування можна поширити і на індекси елементів масиву. Асемблер не підозрює про їх існування і йому абсолютно байдуже, які їх чисельні смислові значення.
Щоб локалізувати певний елемент масиву, до його імені потрібно додати індекс. Так як ми моделюємо масив, то маємо подбати і про моделювання індексу. У мові асемблера індекси масивів це звичайні адреси, але з ними працюють особливим чином. Іншими словами, коли при програмуванні на асемблері ми говоримо про індекс, то скоріше маємо на увазі не номер елемента в масиві, а деяку адресу.
Давайте ще раз звернемося до опису масиву. Наприклад, у програмі статично визначено послідовність даних:
mas dw 0,1,2,3,4,5
Нехай ця послідовність чисел трактується як одновимірний масив. Розмірність кожного елемента визначається директивою dw, тобто вона дорівнює 2 байти. Щоб отримати доступ до третього елемента, потрібно додати до адреси масиву 6. Нумерація елементів масиву в асемблері починається з нуля.
Тобто в нашому випадку мова фактично йде про 4-й елемент масиву — 3, але про це знає тільки програміст; мікропроцесору в даному випадку все одно - йому потрібна лише адреса.
Загалом для отримання адреси елемента в масиві необхідно початкову (базову) адресу масиву скласти з добутком індексу (номер елемента мінус одиниця) цього елемента на розмір елемента масиву:
база + (індекс * розмір елемента).