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

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

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

  2. Сформувати виконуваний модуль за допомогою програми TASM.

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

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

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

  1. Роздрукована програму на мові асемблера.

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

  3. Чисельне значення усіх комірок пам’яті, у яких розташована програма. З’ясувати, чому до них були завантажені саме такі числа.

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

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

  1. Які Ви знаєте арифметичні команди мови асемблер? Як вони записуються? Які мають операнди? Який результат їх виконання?

  2. Які Ви знаєте логічні команди мови асемблер? Як вони записуються? Які мають операнди? Який результат їх виконання?

  3. Які Ви знаєте команди зсуву бітів числа у мові асемблер? Як вони записуються? Які мають операнди? Який результат їх виконання?

  4. Стекова організація пам’яті, її особливості. Які Ви знаєте команди мови асемблера для роботи зі стеком?

  5. Команди виклика процедури та повернення з неї.

  6. Особливості написання com та exe виконуємих модулей мовою асемблера.

  7. Виконати завдання для перевірки 1-12.

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

Структура програми на мові асемблер. Команди вітвлення та циклу

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

Необхідні знання та практичні навички: Знання основ побудови алгоритмів, які містять команди вітвлення та циклу, та можливостей реалізації таких команд на мові асемблера мікропроцесорів Intel 80х86 [1-4]. Студентам обов’язково треба відновити свої знання з таких розділів курсу “Персональні комп’ютери та основи програмування”:

  • “Поняття алгоритму”

  • “Побудова алгоритму поставленої задачі”

  • “Запис алгоритму через тезові формуліровки”

  • “Блок-схеми алгоритмів”,

а також з розділів “Регістр стану мікропроцесора Intel 8086” та “Представлення від’ємних чисел у двійковій арифметиці”, які розглядалися у лабораторних роботах №1 та №2.

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

1.1 Механізми передачі керування та зміна послідовності виконання команд. Їх реалізація у мові асемблера. Типи адресації

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

  • перевірки та вітвлення, що визначають, яку послідовність дій з кількох визначених треба виконати при отриманих результатах розрахунків;

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

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

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

  • включення до циклу команд, які можна було б без зміни логіки алгоритму винести за межі циклу. При великій кількості повторень команд циклу така помилка програмування приводить до значного збільшення часу виконання програми;

  • використання перевірок, які при значеннях даних, визначених програмістом, завжди будуть давати однаковий результат. Така помилка майже не впливає на хід виконання програми, але ускладнює її розуміння іншою людиною та редагування. Наприклад, немає ніякого сенсу послідовно розташовувати два оператора, перший з яких перевіряє чи є число в регістрі AX додатним, а другий, чи є те ж саме число від’ємним (поясніть чому);

  • реалізація циклічного процесу через команди умовного та безумовного переходів в тих випадках, коли це можливо зробити через команду організації циклу. Така помилка також значно ускладнює розуміння програми, хоча і не впливає на коректність її виконання;

  • некоректне звернення до комірок пам’яті при обробці в циклах даних зі складною структурою та рядків великої довжини, яке приводить до отримання невірних результатів, а при програмуванні на мові асемблера навіть до збоїв у роботі програми («підвисання» комп’ютера або аварійне завершення з виведенням на монітор коду системної помилки MS-DOS).

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

У мові асемблера існують команди, які передають керування в програмі через безпосередню зміну адреси у лічильнику команд (для процесора Intel 8086 через зміну зміщення у командному вказівнику). Для організації циклів та вітвлення передбачено три головних засоби передачі керування:

1. Безумовний перехід

Команда JMP

2. Умовний перехід

Команди Jxxx (перехід при певних значеннях прапорів регістра стану)

3. Організація циклу

Команда LOOP

В асемблері існує три типа зміни адрес при передачі керування в програмі, які називаються типами адресацій: SHORT, NEAR та FAR.

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

NEAR - це коротка адресація в межах сегмента. В циклах не може бути використана. Використовується в командах безумовного переходу, якщо в них не визначена адресація типу SHORT. Може також бути використана для виклику функцій та процедур. Якщо ваша програма написана в межах одного сегмента, то адресація NEAR дозволяє передавати керування в будь-яку точку програми.

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

Як можна побачити, всі три типа адресації змінюють адресу в командному вказівнику IP, а тип адресації FAR змінює також регістр сегменту CS.

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