Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 422; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.156 (0.01 с.) |