Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Як можна побачити з наведеного прикладу, посилання на комірку пам’яті позначається в асемблері через квадратні дужки.Содержание книги
Поиск на нашем сайте
5. Адресація зі зміщенням. Як і посередня адресація, місить посилання на комірку пам’яті. Зміщення вказується як безпосередній операнд. Ефективно використовується разом з директивою визначення кількох констант. Наприклад: A DB 1,2,3,4,5; Визначення масиву з кількох констант ................................................................................................. MOV BX, A+2; Завантажити до регістру BX число 3 Арифметичні операції над двійковими числами Додавання та віднімання байт або слів, що містять двійкові дані, здійснюється за допомогою команд ADD та SUB відповідно [1,4,7-9]. Формат команд додавання та віднімання у мові програмування асемблер цілком співпадає з форматом команди MOV: {позначка} [код команди] [операнд-приймач], [операнд-джерело] Зрозуміло, що результат операції буде завантажений до операнда-приймача. Таким чином, наприклад, при складанні двох чисел (виконанні команди ADD), перше з чисел, які складаються, буде втрачене, а замість нього у відповідний регістр або комірку пам’яті завантажується отриманий результат. Віднімання у двійковій арифметиці реалізується через додавання від’ємних чисел. Від’ємне число містить одиничний біт у старшому розряді та формуються за допомогою двійкового доповнення. Таким чином, для представлення від’ємного числа необхідно інвертувати всі біти додатного числа та до отриманого результату додати одиницю. Наприклад:
Зміна знака від’ємного числа проводиться таким самим чином: треба інвертувати всі біти додатного числа та до отриманого результату додати одиницю. Для нашого приклада:
Сума двох рівних за модулем, але різних за знаком чисел, при такому формуванні кодів від’ємних чисел завжди буде дорівнювати 0 (перевірте це для чисел 65 та -65 та спробуйте математично довести цю тотожність). Таким чином, процесор записує від’ємні числа як великі додатні, і правила мови асемблера не дають можливостей їх відрізнити. Програміст повинен сам чітко слідкувати за зміною чисел у регістрах і фіксувати їх знак, якщо у цьому є необхідність. Існують п’ять можливих ситуацій використання команд ADD та SUB, щопов’язані з представленням та розташуванням даних, які представлені у таблиці 12. Таблиця 12. Команди додавання та віднімання мови АСЕМБЛЕР
Прямої операції «Пам’ять-Пам’ять» мікропроцесори типу Intel 80x86 не підтримують. Тому такі дії потрібно здійснювати через три елементарних операції процесора: 1. Занесення даних з комірки пам’яті №1 до регістру. 2. Виконання операції додавання або віднімання між регістром та коміркою пам’яті №2. 3. Занесення даних з регістру до комірки пам’яті №2. Наприклад: A1 DW 50H A2 DW 10H ................................................ MOV AX,A1 ADD AX,A2 MOV A2,AX Множення та ділення чисельних даних в мові асемблер здійснюється за допомогою команд MUL та DIV для беззнакових чисел та за допомогою команд IMUL та IDIV для знакових чисел. Контроль над форматом чисел, що обробляються, не може здійснюватись процесором автоматично, тому вибирати для використання ту чи іншу команду повинен сам програміст. В асемблері мікропроцесора Intel 8086 існують два формати команди множення - множення байта на байт та множення слова на слово. При множенні байта на байт один з множників знаходиться у регістрі AL, а другий - в байті пам’яті або в однобайтовому регістрі. Результат виконання операції множення буде розміщений в регістрі AX. Наприклад, фрагмент програми, що знаходить куб числа 5, можна записати таким чином: A1 DB 5H ......................... MOV AL,A1 MUL A1 MUL A1 При множенні слова на слово один з множників знаходиться у регістрі AX, а другий - в двох байтах пам’яті або в одному з регістрів процесора. Результатом множення в цьому випадку буде подвійне слово. Його молодші розряди будуть розташовані в регістрі AX, а старші - в регістрі DX. Треба мати на увазі, що ця команда ігнорує (затирає) будь-які дані, що містяться в регістрі DX. Наприклад, фрагмент програми, яка підносить число 100H до кубу можна записати так:
A1 DW 100H ...................... MOV AX,A1 MUL A1 MUL A1 Таким чином, формат команд множення у мові програмування асемблер такий: {позначка} [код команди] [операнд] Операнд команди множення визначає розташування першого множника та його формат (байт або слово). Другий множник, відповідно до логіки роботи команди, мусить бути розташований в акумуляторі. Завдання для перевірки №6: За якими ознаками процесор визначає, що в першому випадку треба множити байти, а в другому - слова? Команда множення IMUL працює цілком аналогічним чином, з урахуванням знаку числа. Наприклад:
A1 DB 10110111B ........................................................... MOV AL,5 MUL A1 ........................................................... MOV AL,5 IMUL A1 Оскільки останній біт числа A1 дорівнює одиниці, то в першому випадку воно буде розглядатися як велике додатне, а в другому - як від’ємне число. Завдання для перевірки №7: Підрахуйте без використання калькулятору, який результат буде отриманий в першому та другому випадках. Команда ділення в асеблері також має два формати: ділення слова на байт та ділення подвійного слова на слово. При діленні слова на байт ділене міститься в регістрі AX, а дільник - у байті пам’яті або в однобайтовому регістрі. При діленні слова на байт результат ділення буде розміщений таким чином: частка - у регістрі AH, а остача - у регістрі AL. При діленні подвійного слова на слово ділене знаходиться в у парі регістрів DX:AX, а дільник - а дільник - в регістрі або в слові пам’яті. Після операції ділення остача завантажується в регістр DX, а частка в регістр AX. Команда DIV використовується для беззнакових, а IDIV -для знакових даних. Таким чином, формат команд множення мові програмування асемблер повністю відповідає формату команди множення: {позначка} [код команди] [операнд] 1.4. Команди логічних операцій Як відомо, логічні операції є важливим елементом в проектуванні цифрових електронних схем. Але двійкова логіка має також багато спільного із логікою програмування. Наприклад, всі арифметичні операції здійснюються на апаратному рівні як послідовність великого числа логічних операцій [1,4]. Крім того, команди логічних операцій знаходять широке використання для моделювання логіки роботи цифрових схем, для здійснення арифметичних операцій з кодами ASCII, для накладення масок (виділення окремих біт числа), а також для організування логіки програми. В мові програмування асемблер підтримується шість головних команд для виконання логічних операцій: AND, OR, XOR, NOT та TEST. Ці команди обробляють один байт або одне слово в регістрі або в комірці пам’яті. Встановлюють прапори: CF (прапор переносу), OF (прапор переповнення), PF (прапор парності), SF (прапор знака), ZF (прапор нуля). Працюють команди логічних операцій наступним чином: AND - якщо обидва біта, що зрівнюються, дорівнюють 1, то результат дорівнює 1, а в іншому випадку 0 (команду AND називають також логічним множенням). OR - якщо хоча б один з бітів, що зрівнюється, дорівнює 1, то результат теж дорівнює 1, а в іншому випадку 0 (команду OR називають також логічним діленням). XOR - якщо біти, що зрівнюються, співпадають, то результат дорівнює 0, а якщо різняться - 1. NOT - команда має один операнд та здійснює інверсію всіх бітів числа. TEST - працює як команда AND, але тільки змінює прапори стану, не впливаючи на результат. Може бути використана для перевірки окремих байтів числа на наявність одиниць. Приклади виконання логічних команд наведені в табл. 13: Таблиця 13. Приклади виконання логічних команд
Формат логічних команд такий же самий, як і арифметичних: {позначка} [код команди] [операнд-приймач], [операнд-джерело] Завдання для перевірки №8: Наведіть свої приклади логічних команд. Напишіть на мові асемблера фрагмент програми, який містить логічні команди, та визначте, яким буде результат виконання цього фрагменту програми. Результат роботи покажіть викладачеві. Команди зсуву бітів числа В мові асемблер існує чотири команди зсуву бітів - SAR, SAL, SHR та SHL. Зсув може здійснюватись праворуч або ліворуч на 8 позицій для байта або на 16 для слова. Команда містить 2 операнди - регістр або комірку пам’яті, де міститься байт або слово, які треба обробити, та вказівник на кількість позицій зсуву. Зсув на одну позицію може бути вказаний безпосередньо, а для зсуву на дві позиції або більше треба вказати кількість позицій у регістрі CL. Таким чином, формат команд зсуву у мові програмування асемблер такий: {позначка} [код команди] [операнд1], [операнд2] На відміну від попередніх команд з двома операндами тут перший операнд є водночас і джерелом, і приймачем, тобто число, над яким проводиться зсув, змінюється безпосередньо у тій комірці пам’яті або регістрі, куди воно було завантажене. Зрозуміло, що само число при такий операції втрачається. Другим операндом команди зсуву може бути або безпосередньо число 1, або регістр CL. Команда SHR визначає логічний зсув праворуч без урахування знака, а команда SAR -арифметичний зсув праворуч з урахуванням знака. Ризниця між цими командами полягає у тому, що для заповнення старшого байта при виконанні команди SHR використовується нуль, а в команді SAR - біт знака. Приклади використання команд SAR та SHR наведеніу таблиці 14. Таблиця 14. Приклади використання команд арифметичного та логічного зсуву
Оскільки при зсуві ліворуч молодші біти числа завжди замінюються нулями, результат виконання команд SAL та SHL завждибуде однаковим. Важливим при виконанні команд арифметичного та логічного зсуву є те, що біт, який звільнюється, переходить до прапору перенесення. Це дає можливість ефективно використовувати ці команди для множення та ділення чисел на два. Завдання для перевірки №9: Напишіть фрагмент асемблерної програми з використанням команди SHL та проаналізуйте результат їх виконання таким же чином, як це зроблено у наведеному прикладі для команд SAR та SHR. Завдання для перевірки №10: Покажіть, що команди зсуву можуть бути використані для множення або ділення числа на два.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-26; просмотров: 327; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.228.171 (0.009 с.) |