Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

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

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

 

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

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

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

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

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

[ім’я] 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.

Команда перенесення даних

У чотирирозрядних та вісьмирозрядних процесорах існувало багато асемблерних кодів для команд перенесення даних [1]. Наприклад, існували окремі команди для перенесення даних з одного регістру процесору до іншого, з комірки пам’яті до регістру та з регістру до комірки пам’яті. Але перехід до шістнадцятирозрядної шини даних дозволив реалізувати один асемблерний код команди MOV для будь-якої операції перенесення даних [4,7-9].

Формат команди:

{позначка} [код команди] [операнд-приймач], [операнд-джерело]

Увага! Розташування в цій команді приймача і джерела даних є стандартним для процесорів фірми Intel.

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

1. Безпосередня адресація. Дані, що завантажуються, містяться безпосередньо у коді команди. Наприклад:

A4 DB?; Зарезервувати комірку для змінної А1

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

MOV AX,15H; Завантажити до акумулятору число 15H

MOV A4,15H; Завантажити до комірки пам’яті A1 число 15H

2. Неявна адресація. Джерело та приймач інформації записуються у самому коді команди. Це може бути назва регістру або посилання на комірку пам’яті. Наприклад:

A1 DB 100H; Завантажити до комірки пам’яті A1 число 100H

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

MOV BX,A1; Завантажити до регістру BX вміст комірки A1

MOV AX,BX; Завантажити до регістру AX вміст регістру BX

3. Пряма адресація. Безпосереднє звертання до комірки пам’яті з визначеним номером. Цей вид адресації використовується при системному програмуванні для занесення даних до комірок пам’яті, вміст яких впливає на виконання системних процедур та загалом на представлення інформації в комп’ютері. Наприклад:

MOV [B8000], ‘A’; Завантажити символ А до відеопам’яті

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

4. Посередня адресація. При цьому виді адресації вміст одного регістру або регістрової пари процесору є вказівником на комірку пам’яті, що містить потрібну інформацію або в яку вона мусить бути поміщена. Посилання на поточну комірку пам’яті позначається символом $ (долар). Наприклад:

MOV BX, 100H

МOV CX, [BX]; Завантажити до регістру СХ число з сегменту даних зі зміщенням 100Н

;(повна адреса комірки пам’яті DS:100H)



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 330; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.119.67 (0.01 с.)