Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_1-3.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
998 Кб
Скачать
☆

2. Порядок виконання роботи

1. Знайти транслятор і файли afd.exe та td.exe.

  1. Проаналізувати текст програми lab1.asm, зрозуміти зміст кожної з асемблерних команд. З’ясувати, як будуть змінюватися дані всіх регістрів процесору при виконанні кожної з них. Текст програми повинен мати такий вигляд:

text SEGMENT

ORG 100h

begin: MOV ax,20

MOV bx,30

ADD ax,bx

MOV cx,ax

ADD ch,16

RET

text ENDS

END begin

  1. Сформувати лістинг, об’єктний та виконуваний код для програми lab1.asm; останній записати у файл lab1.com.

  2. Запустити програму lab1.com на обробку. Переконайтеся в тому, що вона коректно виконується (комп’ютер не «підвісає»).

  3. Завантажити програму lab1.com до відладчика AFD та крок за кроком виконати всі її команди. Після виконання кожної команди аналізувати стан кожного з регістрів процесора.

  4. Завантажити програму lab1.com до відладчика TD та крок за кроком виконати всі її команди. Після виконання кожної команди аналізувати стан кожного з регістрів процесора.

3. Зміст звіту

1. Послідовність дій, які потрібно виконати для компіляції асемблерної програми. Розглянути два випадка: компіляцію com-програми та компіляцію exe-програми.

2. Таблиця з трьох колонок. До першої занести початковий код асемблерної програми файлу lab1.asm, до другої - її машинні коди, а до третьої - стан усіх регістрів процесору після її виконання.

3. Висновки за роботою.

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

  1. Узагальнена структура мікропроцесора Intel 8086 та персонального комп’ютера IBM PC.

  2. Що таке початкова та об’єктна програма?

  3. Структурна схема гіпотетичного мікропроцесора, призначення всіх його регістрів.

  4. Основні регістри процесору типа Intel 8086, їх призначення.

  5. Сегментація програми. Сегменти коду, даних та стеку. Їх розташування в пам’яті еом. Директиви мови асемблера segment та ends.

  6. Організація стекової пам’яті та її призначення.

  7. Регістр стану процесора. Його призначення. Біти регістра стану у процесорі Intel 8086.

  8. Режим трасування програми. Як він встановлюється і для чого використовується?

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

10. Чи потрібно аналізувати регістр стану при виконанні команд програми lab1.asm? Чому?

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

Арифметичні та логічні операції мови асемблер

Мета роботи: Навчитися писати на мові асемблер прості програми, які реалізують алгоритми, що містять арифметичні та логічні операції над чисельними даними.

Необхідні знання та практичні навички: Знання основ програмування на мові асемблера та основ роботи з транслятором TASM і динамічними відладчиками AFD та TD [1,4,7-9].

1. Теоретичні відомості

    1. Директиви визначення даних

Для безпосереднього визначення чисельних та рядкових величин, які не змінюються при виконанні програми, у мові асемблер введені директиви визначення даних. Формат директиви визначення даних такий:

[ім’я] D{n} {вираз}

де D{n} - одна з команд визначення даних, які будуть наведені нижче. Ім’я елемента вказувати не обов’язково. Але, оскільки у програмі завжди існують посилання на ті чи інші дані, використання імен для роботи з ними є найбільш зручним. Наприклад:

A1 DW 2; Визначити слово (дві комірки пам’яті) та занести до них число 2

A2 DB 5; Визначити байт (одну комірки пам’яті) та занести до неї число5 ...................................................................................................................................

...................................................................................................................................

MOV AX,A2; Занести число A2 до акумулятору.

MOV CH,A1; Занести число A1 до старших 8 бітів регістра СX

Існує чотири команди визначення даних, які підтримуються в мові асемблер:

DB - визначити байт (одну комірку пам’яті);

DW - визначити слово (дві комірки пам’яті);

DQ - визначити чотири слова (вісім комірок пам’яті);

DT - визначити десять слів (двадцять комірок пам’яті).

Вирази при описуванні даних можуть бути чотирьох типів:

1. Вирази-константи. У директивах з виразами-константами чисельні дані задаються безпосередньо, при цьому визначається також їх тип. Подальше у програмі вони можуть бути використані тільки як дані визначеного типу. Крім того, після числа вказується система числення, у якій записано число:

B - двійкова;

Q - вісімкова;

H - шістнадцятирічна;

D - десяткова.

Якщо, як в попередньому прикладі, явних вказівок на систему числення немає, то по замовченню число розглядається як десяткове. Наприклад:

A1 DW 2 ; Визначити слово (дві комірки пам’яті) та занести до них число 2.

A2 DB 15H ; Визначити байт (одну комірки пам’яті) та занести до неї

; шістнадцятирічне число 15

B1 DQ 17Q ; Визначити чотири слова та занести до них вісімкове число 17.

Завдання для перевірки №1: Переведіть числа, які позначені змінними A2 та B1 у двійкову та у десяткову системи числення.

Слід зазначити, що у мові асемблера процесору Intel 8086 передбачені переміщення та обробку лише даних одного типу. Наприклад, запис:

A2 DB 15H

MOV AX, A2

є невірним, тому що до акумулятору, якій має 16 розрядів, ми намагаємося завантажити восьмирозрядне число (1 байт). Нижче наведено 2 вірних варіанти:

A2 DB 15H

MOV AL, A2

A2 DW 15H

MOV AX, A2

2. Невизначені вирази. Якщо комірка пам’яті мусить бути завантажена не з початку роботи програми, а тільки у процесі її роботи, то її перед початком роботи програми треба зарезервувати. Це досягається таким чином:

A1 DW ?;

Тоді у будь-якому місті програми можна поставити оператор типу:

MOV A1, АX

Результатом виконання такого оператора буде перенесення даних з акумулятору до комірки пам’яті з ім’ям A1. Як вам відомо, у мовах високого рівню, таких як ПАСКАЛЬ, С або ж Фортран, таке визначення змінних також ефективно використовується, а самі такі змінні називають невизначеними або динамічними.

Завдання для перевірки №2: Пригадайте, як визначаються динамічні змінні у мові програмування ПАСКАЛЬ? В яких випадках вони використовуються?

3. Вирази з визначенням кількох констант. Вираз може містити водночас декілька констант, що розділяються комами. Кількість таких констант обмежується тільки довжиною рядку. Наприклад:

A3 DB 10,12,23H,1001B

асемблер визначає такі константи у вигляді послідовних суміжних байт. Посилання на ім’я А3 вказує на першу константу, А3+1 - на другу, А3+2 - на третю тощо. Наприклад, команда:

MOV AH,A3+2

заносить до старших восьми розрядів акумулятора шістнадцятирічне число 23.

При роботі з константами такого типу треба мати на увазі, що якщо команда асемблера DB резервує по одному байту для кожного числа, то команда DW – по одному слову (два байти), незалежно від кількості розрядів у числах, що завантажуються. Тому при використанні команди типа

A3 DW 10,12,23H,1001B

посилання на другу константу (число 12) буде здійснюватись через вираз А3+2, а не А3+1, як це було у попередньому прикладі (поясніть чому саме).

У мовах високого рівня таким чином описуються змінні з індексами або масиви.

Завдання для перевірки №3: Скільки констант визначено в наведеному вище операторі DB під назвою А3? Переведіть всі ці числа у двійкову, десяткову та шістнадцятирічну системи числення. Як би ви визначили відповідний масив з ім’ям А3 у мові програмування ПАСКАЛЬ?

Завдання для перевірки №4: Напишіть на мові асемблера фрагмент програми, у якому:

  1. Завантажте п’ять чисел: 12,13H,18,70Q,280 під одним ім’ям.

  2. Завантажте друге з визначених чисел до регістру АХ, а п’яте до регістра СХ.

Яку з наведених вище команд ви використали для визначення даних і чому?

4. Вирази з повторенням змінних. Директиви визначення даних допускають заповнення сусідніх комірок пам’яті однаковими значеннями через дублювання даних. Формат такої директиви має вигляд:

[ім’я] D{n} {число повторень} DUP {вираз}

Наприклад:

DW 10 DUP(?) ; десять невизначених слів

DB 5 DUP(14); п’ять байт, в яких містяться числа 0EH

DB 3 DUP(4DUP(8)); дванадцять байт, в яких містяться числа 8H

Завдання для перевірки №5: Наведіть свої приклади виразів з повторенням змінних та поясніть їх викладачеві. Які ви бачите можливості практичного використання виразів з повторенням змінних при написані програм?

Вираз може містити чисельну або символьну константу. Символьні константи беруться у подвійні або одинарні ‘лапки’ та переводяться при обробці програми в коди ASCII (додаток 3). Наприклад:

A1 DB ‘IBM PC AT’

Більш досконало робота з рядковими константами у мові програмування асемблер буде описана у теоретичних відомостях до лабораторної роботи №4.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]