- •Інженерія програмного забезпечення
- •Загальні вимоги до програмного забезпечення
- •Процеси життєвого циклу програмного забезпечення
- •Керування процесом проектування програмного забезпечення
- •Прототипування програмних систем.
- •Архітектурне проектування програмних систем
- •Архітектура розподілених систем
- •Проектування систем реального часу
- •Об‘єктно-орієнтоване проектування програмних систем.
- •Візуальне проектування об‘єктно-орієнтованих систем
- •Динамічні моделі об‘єктно-орієнтованих систем
- •Моделі реалізації об‘єктно-орієнтованих програмних систем
- •Проектування інтерфейсу користувача
- •Тестування програм та систем
- •Структурне тестування програмного забезпечення.
- •Методи та засоби автоматизації тестування програмного забезпення
- •Системне програмування
- •Дати оцінку основним правилам автоматичного перетворення типів.
- •Розкрити сутність адресної арифметики при роботі з вказівниками.
- •Обґрунтувати алгоритм та представити програмний код для реалізації програми, що сумує з 0 по 3 біт першого числа та з 3 по 6 біт другого числа.
- •Розкрийте поняття програмна модель мікропроцесора.
- •Проаналізувати типи даних в мові асемблер.
- •Проаналізувати особливості роботи із масивами в мові асемблер.
- •Проаналізувати структуру програми мовами програмування з родини асемблерів(синтаксис ассемблера).
- •Організувати на асемблері ехе-програму, щоб перекодувати символи строки шляхом додавання до літери строки кодів символів таблиці(Код мовою Asembler).
- •Організувати ехе-програму , щоб перекодувати символи з однієї таблиці в іншу(код мовою асемблера).
- •Організація баз даних
- •Моделі даних: ієрархічна, мережева, реляційна, об‘єктно-реляційна, нереляційна.
- •NoSql або постреляційні бази даних
- •Реляційна модель даних. Операції реляційної алгебри.
- •Нормалізація відношень при проектування реляційної моделі.
- •Поняття первинних ключів. Роль функціональних залежностей. Зовнішні та батьківські ключі.
- •Нормалізація відношень: перша, друга та третя нормальні форми
- •Визначення другої нормальної форми. Правило приведення. Повна функціональна залежність.
- •Визначення третьої нормальної форми. Правило приведення. Транзитивна залежність.
- •Семантичне моделювання та когнітивний аспект.
- •Проектування баз даних: концептуальне, логічне, фізичне
- •Модель «сутність-зв‘язок» або er-модель
- •Нормалізація даних в er-моделі
- •Case-засоби проектування баз даних.
- •Мова маніпулювання даними sql. Побудова запитів.
- •Адміністрування даних. Засоби підтримки цілісності баз даних
Організувати на асемблері ехе-програму, щоб перекодувати символи строки шляхом додавання до літери строки кодів символів таблиці(Код мовою Asembler).
data segment
mes db 0ah,0dh,'code- ','$' ; перенос каретки + слово
mas db 10 dup (?) ; не ініціалізований масив з 10 елементів байт
ends
stack segment ; виділяємо стек та заповнюємо його 0
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
xor ax,ax ; очищуємо регістр
mov cx,10 ; в сх записуємо 10 (розмір масиву) регістр для роботи з масивами
mov si,0 ; в si 0
go: ; запис в масив данні які вводяться з клавіатури
mov ah,01 отримуємо символ
int 21h
mov mas[si],al записуємо його в масив
inc si ; інкремент лічільника
loop go
; відновлюємо значення сх і si
mov cx,10
mov si,0
;вивід переносу та слова
mov ah,09h
lea dx,mes
int 21h
show: ; вивід зміненого масиву
mov ah,02h
mov dl,mas[si]
add dl,30h ; число яке додаємо до ASCII коду
int 21h
inc si
loop show
mov ax, 4c00h ; вихід з програми
int 21h
ends
end start ; кінцева точка
Організувати ехе-програму , щоб перекодувати символи з однієї таблиці в іншу(код мовою асемблера).
.model small
.stack 100h
SEGM segment
assume CS:SEGM, DS:SEGM, ES:SEGM, SS:SEGM
org 100h
Begin:
;open file
mov ah,3dh ; Ф-ція для відкриття фалу
mov al, 00 ;режим відкриття (0-для зчитування, 1- для запису, 2- для зчитування і запису )
lea dx, file ;адреса рядка з іменем файла
int 21h
jc f_n_f ;cf=1 ; якщо файл не знайдений, який ми хочемо відкрити, то CF встановиться в 1 (помилка, вихід)
mov bx,ax
mov handle,bx ; вказівник на файл
;create file
mov ah,3ch ; Ф-ція для створення файлу
lea dx, sec_file ;адреса рядка з іменем файла
xor cx,cx ;обнулення регістру cx
int 21h
jc cnt_create ; CF встановиться в 1, якщо файл не можливо створити
mov bx,ax
mov handle_two,bx ; вказівник на файл
;;;;
;reading in bufer
next_char: ; будемо вибирати по одній букві із файлу. і обробляти їх відповідно
mov ah,3fh ;Ф-ція, за допомогою якою модна читати із файлу через "описатель"
mov cx,1 ; кількість байт, які ми хочемо прочитати
lea dx,bufer ; адрес буфера для зчитування
mov bx,handle ; вказівник на файл
int 21h
jc close_file ; якщо неможливо зчитати із файла, то CF встановиться в 1
cmp cx,ax ; ах - кількість прочитаних байт, якщо рівно 1, значить є чимвол ідемо на обробку..., якщо немає кінець файлу
je is_char ; ==
;not char
mov end_file,1 ;тимчасова змінна, в якій ми зберігаємо наявність кінця файлу..
mov cx,ax ;записуємо кількість обробених байтів
is_char:
mov ah,bufer ; поміщаємо символ із буфера, який ми хочемо обробити
lea bx, my_table ; встановлюємо ефективний адрес з нашою таблицею символів
mov al,ah
xlat ; отримужмо значення із таблиці в ds:bx адреса таблиці, a al номер осередку
mov bufer,al ; заносимо в буфер оброблений символ
mov ah, 40h ;Ф-ція, для запису у файл через "описатель"
mov bx,handle_two ; вказівник на файл
lea dx,bufer ; заносимо інформацію із буфера у файл
int 21h
cmp end_file,1 ; порівнюємо чи ще немає кінця файлу
je close_file ; якщо кінець, то перейти на закриття файлу
jmp next_char
;close my file
close_file:
; Ф-ції, для закриття файлів
mov ah,3eh
mov bx,handle_two
int 21h
mov ah,3eh
mov bx,handle
int 21h
jmp exit
f_n_f:
mov ah,09h
lea dx, file_not_found
int 21h
cnt_create:
mov ah,09h
lea dx, not_create_file
int 21h
exit:
mov ax,4c00h
int 21h
;data
file db 'first.txt',00
sec_file db 'second.txt',00
file_not_found db 'Error: File ', 34 ,'first.txt', 34 ,' not found$'
not_create_file db 'Error: Can not create file$'
handle dw ?
handle_two dw ?
bufer db 200 dup(?)
end_file db 0
my_table db 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuNopasdasduioqwen1234567890qwejkl-xcvbnmsdfbaAsdlfkMXvXsjkdlfnqk2-l45738euhfasAhdfa87w9heMjaskdnfau0wuftwefsdfSWFHAS'
SEGM ends
end Begin
Обгрунтувати алгоритм та представити програмний код для реалізації на асемблері ехе-програму, щоб перекодувати символи строки шляход додавання до літер випадкового симвому(код мовою асемблер)
Осікльки для генерації випадковивих, або псевдовипадкових чисел в мові програмування асеблер немає вбудованих функцій, тому найбільш логічним рішенням буде використання системного часу, отримати яке ми можемо завдяки 3 перериванням
Для застосування у коді будемо обирати переривання 02h. для отрмання значення секунд, котре буде міститись у регістрі DH в коді BCD
Функція 2Ah повертає дані в шістнадцятковій формі. Наприклад, для того щоб вивести день тижня необхідно наперед підготувати строку в пам’яті із переліченими днями, вони мають мати однакову довжину, і після кожного дня потрібно записати в пам’ять знак кінця строки.
Отримавши у відповідному регістрі число дня ми множимо на довжину імені дня, таким способом ми отримаємо адрес зміщеня відповідного дня в цій строці, додавши його до адреса строки, отримаємо адрес зміщення в пам’яті, після чого можемо вивести його на екран (виведення буде до першого символа кінця строки, який ми мали заздалегідь записали в пам’ять)
Переклад чисел із двійкової системи числення в 16-річну здійснюється в такий спосіб: розряди двійкового числа групуються по 4, починаючи з молодшого, після чого кожна четвірка розрядів (тетрада) перетвориться у відповідну 16-річну цифру (у нашому випадку — у ASCII-код цієї цифри).
У процесорі 8086 немає засобів звертання до четвірок бітів, мінімальним осередком оперативної пам'яті, до якого він має доступ, є байт. Тому необхідно кожну тетраду розширити до байта і лише потім перетворювати результат у ASCII-код.
Для виділення значень окремих бітів двійкового числа застосовується операція логічного множення (AND) по масці. Наприклад, для видділенні другої по старшинству тетради двійкового слова (припустимо, регістра АХ) використовується маска 0F0h, наприклад:
відповідна асемблерна команда:
and ax, 0F0h
Для зрушення сукупності бітів щодо розрядної сітки використовуються команди логічного зрушення (зокрема, SHR — зрушення вправо). Щоб зрушити цифру З, отриману вище, можна використовувати команду
shr ax, 4 ; зрушення вправо на 4 розряди
Після того, як тетрада підготовлена, необхідно перетворити її в ASCII‑ код. Одним з методів є використання таблиці перетворення, що містить ASCII-коди преутворених цифр. При цьому номер осередку таблиці, що відповідає одній цифрі, заміняється значенням даного осередку — кодом цифри. Таблиця перетворення (трансляції) оформляється у виді набору символів цифр, записаних у порядку зростання:
tabl db '0123456789ABCDEF'
Для вибірки значення з таблиці зручно використовувати команду табличної трансляції XLAT (без операндів). Перед виконанням XLAT необхідно занести в регістри DS:BX повну адреса таблиці, а в AL — номер (n) осередку таблиці. XLAT поміщає в той же регістр AL значення n-й осередку таблиці, наприклад:
lea bx, tabl
mov al, 9
xlat ; AL = '9' = 39h
Перетворені цифри можна заносити в пам'ять або відразу виводити на екран.
Для виведення символів ми можемо користуватися будь-якою з освоєних нами функцій виводу на екран.
Код:
data segment
tabl db '0123456789ABCDEF'
mes db 0ah,0dh,'code- ','$' ; перенос каретки + слово
mas db 10 dup (?) ; не ініціалізований масив з 10 елементів байт
ends
stk segment stack ; виділяємо стек та заповнюємо його 0
dw 256 dup(?)
stk ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
xor ax,ax ; очищуємо регістр
mov cx,10 ; в сх записуємо 10 (розмір масиву) регістр для роботи з масивами
mov si,0 ; в si 0
go: ; запис в масив данні які вводяться з клавіатури
mov ah, 01 ; отримуємо символ
int 21h
mov mas[si],al; записуємо його в масив
inc si ; інкремент лічільника
loop go
; відновлюємо значення сх і si
mov cx,10
mov si,0
;вивід переносу та слова
mov ah,09h
lea dx,mes
int 21h
show: ; вивід зміненого масиву
mov ah, 02h ; interrupts to get system time
int 1Ah ; DX now hold number of clock ticks since midnight
mov ax, dx
xor dx, dx
and al,0f0h ;множимо регістр al на маску 0f0h
shr al,4 ;здвигаємо на 4 біти вправо
lea bx,tabl ;загружаємо в BX адрес зміщення таблиці
xlat
mov ah,02h
mov dl,mas[si]
add dl,bx ; число яке додаємо до ASCII коду
int 21h
inc si
loop show
mov ax, 4c00h ; вихід з програми
int 21h
ends
end start ; кінцева точка