Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Арифметичні та логічні операції мови асемблерСодержание книги
Поиск на нашем сайте
Л а б о р а т о р н а р о б о т а №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 вірних варіанти:
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.222.161.245 (0.009 с.) |