Ім'я файлу: Лабораторна робота №1, Прикладне програмування, Підручняк Михайл
Розширення: docx
Розмір: 72кб.
Дата: 03.03.2021

П різвище: Підручняк

Ім'я: Михайло

Група: КН-208

Варіант: 10

Дата захисту: 16.12.2020
Кафедра: САПР

Дисципліна: Прикладне програмування

Перевірив: Головатий А.І.

ЗВІТ

до лабораторної роботи №1

на тему «Система програмування на асемблері»
Мета роботи: Вивчення системи програмування на Асемблері ІВМ РС.
Короткі теоретичні відомості:

Асемблер є мовою програмування низького рівня Він забезпечує написання, відладку та виконання програм на рівні близькому до машинних команд. Основна область застосування Асемблера - написання високоефективних програм системного характеру (драйверів, динамічна відеографіка, обробка сигналів в режимі реального часу, тощо).Програмування на Асемблері базується на системі програмування, яка забезпечує перехід від початкового файлу з текстом програми до завантажуваного файлу, готового до виконання (інтерпретації мікропроцесором).

Реалізація програми на Асемблері охоплює такі етапи:

- написання програми на мові Асемблера, ввід та оформлення її у вигляді початкового файлу за допомогою текстового редактора (наприклад, Nогtоn Соmmander, FAR, Блокнот (шрифт – Terminal) );

- трансляція початкового файлу в об'єктний файл;

- редагування зв'язків на основі декількох об'єктних файлів і формування завантажуваного файлу для інтерпретації мікропроцесором.

Така схема забезпечує незалежне асемблювання кількох початкових файлів з подальшим їх об'єднанням на рівні об'єктних файлів в один завантажуваний. Вказаний підхід реалізує концепції модульного програмування (розробка та реалізація програм по частинах - модулях). Відповідно розглядають початковий модуль, об'єктний модуль та завантажуваний модуль. Відомі і простіші схеми асемблювання, які забезпечують, перехід, від рівня початкових файлів до завантажуваних.
Лабораторне завдання:

1. Ввести і протранслювати тексти учбових програм на Асемблері.

Ознайомитись з лістінгами трансляції.

2. Зібрати відтрансльовані програми редактором зв’язків і ознайомитись з лістінгом

редагування.

3. Виконати зібрану програму і вказати на виявлені особливості.

4. Використовуючи тексти учбових програм провести їх власну модифікацію і

повторно виконати пп. 1-3.

Текст першої програми з власною модифікацією:
sseg segment stack ; опис стеку

db 256 dup (?) ; виділяємо 256 байт сегменту стека

sseg ends ; кінець сегменту

;-----------------------------------------------------------------------

dseg segment ; опис даних

dseg ends ; кінець сегменту опису даних

;-----------------------------------------------------------------------

cseg segment ; типовий початок програми

assumecs:cseg,ds:dseg,ss:sseg ;зв'язує імена сегментів

start: jmp main ; перейти на main

main: push ds ; заносимо сегментв стек

mov ax,0 ; присвоюємо регістру ax 0;

push ax ; запихаємо регістр ax в стек

mov ax,dseg ; вказуємо сегмент даних

mov ds,ax ; ініцілізаціяds сегментом

;----------------------------------------------------------------------

mov ax,0012h ; встановлення режиму дисплея VGA

int 10h ; задаємо режим відеоадаптера (переривання)

;-----------------------------------------------------------------------

mov al,8 ; задання кольору

mov cx, 10 ; стовпці

mov dx, 10 ;рядки

mov ah, 0ch ; виведення пікселів


c1: inc cx ;наступний стовпець

int 10h ;переривання

cmp cx, 30 ;порівнюємо значення

JNE c1 ;перехід якщо значення не нуль
mov cx, 10

inc dx ;наступний рядок

cmp dx, 30 ;порівнюємо значення

JNE c1 ;перехід якщо значення не нуль

;-----------------------------------------------------------------------

exit: mov ax,4c00h ; вихід з програми

int 21h ; виклик переривання 0x21

;-----------------------------------------------------------------------

cseg ends ; кінець сегменту

end start ; завершення програми

Проводимо лінкування, і запускаємо програму




Текст другої програми з власною модифікацією:
sseg segment stack ; описуємо стек

db 256 dup (?) ; виділяємо 256 байтсегменту стека

sseg ends ; сегмент опису стека закінчився

;------------------------------------------------------------------------

dseg segment ;початок сегментуопису даних

err db 'someerror$'; ; ініціалізовуємо стрічку

string1 db 'Misha, $'; ; ініціалізовуємо стрічку

string2 db 'KH-208 $' ; ініціалізовуємо стрічку

dseg ends ; кінець сегменту опису даних

;------------------------------------------------------------------------

cseg segment ; початоксегменту

assumecs:cseg,ds:dseg,ss:sseg ;зв'язує імена сегментів

start: jmp main ; перейти на main

main: movax,dseg ; вказує сегмент даних
mov ds,ax ; ініцілізаціяds сегментом

mov dx,offset string1 ;dxзаписуємо в регістр

mov ah,09h ;виводимо надисплей стрічку символів.

int 21h ; переривання 0x21, виклик функції

mov dx,offset string2 ;dx записуємо в регістр

mov ah,09h ; виводимо на дисплей стрічку.

int 21h ; переривання 0x21, виклик функції

jmp exit ; перходимо на вихід

;------------------------------------------------------------------------

exit: mov ax,4c00h ; вихід з програми

int 21h ; виклик переривання 0x21

;------------------------------------------------------------------------

error: mov dx,offseterr ; записуємо в регістр стрічку для виводу

mov ah,3 ; вивести на дисплей стрічкусимволів

int 21h ; переривання 0x21, виклик функції

jmp exit ; перехід на вихід з програми

cseg ends ; кінець сегменту

endstart ; завершення програми

Проводимо лінкування, і запускаємо програму

Текст третьої програми з власною модифікацією:

sseg segment stack ; опис стеку

db 256 dup (?) ; виділяємо 256 байтсегменту стека

sseg ends ; кінець сегменту

;------------------------------------------------------------------------

dseg segment ; початок сегменту опису даних

mas db ' Misha208' ; ініціалізовуємомасив

err db 'error$' ; ініціалізовуємо стрічку

dseg ends ; кінець сегменту опису даних

;-----------------------------------------------------------------------

cseg segment ; типовий початок сегменту

assume cs:cseg,ds:dseg,ss:sseg ;зв'язує імена сегментів

з сегментним регістром

srart: jmp main ; переходимо на main

main: push ds ; заносимо сегментв стек
mov ax,0 ; присвоюємо регістру ax 0

push ax ; заносиморегістр ax в стек

mov ax,dseg ; вказуємо сегмент даних

mov ds,ax ; ініціалізовуємоds сегментом

;-----------------------------------------------------------

mov si,0 ; організаціяциклуloop

mov cx,10 ; вказуємо ітератор циклу

;-----------------------------------------------------------

c: mov dx,offset mas[si] ; запис стрічки

mov ah,06h ; виводимо символ на дисплей

int 21h ;переривання 0x21, виклик функції

inc si ; добавляємо si 1, для ітерації

loop c ; повертаємось на мітку с: (зациклюємось)

;--------------------------------------------------------------------

exit: mov ax,4c00h ; вихід з програми

int 21h ; переривання 0x21, виклик функції

;--------------------------------------------------------------------

error: mov dx,offseterr ; запис стрічки

mov ah,9 ;виводимо на дисплей стрічку

int 21h ; переривання 0x21, виклик функції

jmp exit ; переходимо на мітку exit

cseg ends ; кінець сегменту

end start ; завершення програми

Проводимо лінкування, і запускаємо програму



Контрольні питання:

1)На прикладі учбової підпрограми на асемблері вкажіть її основні структурні елементи та їх призначення:

Учбова програма складається з наступних сегментів: cseg, dseg, sseg

sseg- стековий сегмент, з допомогою якого описуэться стек.

dseg- сегмент даних, призначений для опису даних.

cseg - програмний сегмент, що містить машинні команди для виконання.

2) Охарактеризуйте способи передачі параметрів у підпрограму.

valuein - нові значення формальних параметрів, отримані в процесі роботи підпрограми, губляться разом з очищенням пам'яті

valueout - використовуючи скопійовані адреси фактичних параметрів, виконується запис результуючих значень формальних параметрів у комірки пам'яті фактичних параметрів

valueinout - використовуючи скопійовані адреси фактичних параметрів, виконується запис результуючих значень формальних параметрів у комірки пам'яті фактичних параметрів

addrin - вплив підпрограми на викликаючу через такі параметри відсутній

addrout - спеціального копіювання результатів не потрібно, оскільки результат відразу зберігається у комірках па-м'яті фактичних параметрів

addrinout - спеціального копіювання результату не потрібно, оскільки всі дії з формальними параметрами виконувалися безпосередньо над комірками пам'яті фактичних параметрів

3) Вкажіть особливості використання функцій DOS та BIOS.

Функції BIOS використовуються найпростішими ОС (такими, як DOS). Сучасні ОС, такі як Windows і Linux, користуються функціями BIOS тільки в момент завантаження і в «аварійних» режимах - після завантаження вони використовують свої драйвери, а не BIOS.

З розвитком комп'ютерних систем в коді BIOS продовжували використовуватися застарілі технології: перш за все «реальний режим» роботи процесора x86. Для заміни BIOS поруч виробників обчислювальних систем впроваджується технологія EFI.

4) Як здійснюється передача параметрів для функцій DOS та BIOS?

При передачі параметрів відкладеним обчисленням функція отримує адресу заглушки, яка при першому зверненні до неї визначає значення параметрів і зберігає його у внутрішній локальній змінній, а при подальших викликах повертається раніше обчислене значення

5) На навчальному прикладі прокоментуйте команди роботи зі стеком.

Команда PUSH виконує запис значення «джерело» в вершину стека:

Алгоритм роботи цієї команди, включає дві дії: Значення SP зменшується на 2 Значення джерела записується за адресою, що вказується парою SS: SP.

Команда POP копіює вміст комірки пам'яті за адресоюSS: SP в операнд і збільшує значення регістра стека на розмір операнд

6) На учбовому прикладі прокоментуйте команди для організації вкладених циклів.

Команда LOOP виконує декремент CX, а потім перевіряє його значення. Якщо вміст CX не дорівнює нулю, то здійснюється перехід на мітку, інакше управління переходить до наступної після LOOP команді. Вміст CX інтерпретується командою як позитивне число

7)Охарактеризуйте команди Асемблера та функції BIOS для виводу на дисплей в графічному режимі.

Вивести символ на дисплей - ввід: AH=06h, DL=ASCII-код символа (00h-0feh), вивід: немає.

Вивести символ на дисплей - ввід: AH=02h, DL=ASCII-код символа, вивід: AL=DL

Вивести на дисплей стрічку символів - ввід: AH=09h, DS:DX=адреса стрічки символів (закінчується $ (24h)).

Вивід символа на принтер (LPT 1) - ввід: AH=05h, DL=ASCII-код символ, вивід: немає.
Висновок: Під час виконання даної лабораторної роботи я вивчив основи та особливості  мови мови Assembler, ознайомився із 16-ти розрядним емулятором DosBOX з допомогою  яких й реалізував власний модифікований код. Також навчився збирати відтрансльовані  програми та ознайомився із лістингом програми.
скачати

© Усі права захищені
написати до нас