
- •Міністерство освіти і науки, Молоді та спорту україни Львівський коледж Державного університету інформаційно-комунікаційних технологій
- •Інструкція до лабораторної роботи №5
- •Лабораторна робота № 5
- •Короткі теоретичні відомості
- •Арифметичні і логічні операції
- •Команди зсуву
- •Команди лінійного зсуву
- •Команди циклічного зсуву
- •Постановка завдання
- •Варіанти індивідуальних завдань
- •Методичні вказівки
- •Контрольні запитання
- •Джерела інформації
Міністерство освіти і науки, Молоді та спорту україни Львівський коледж Державного університету інформаційно-комунікаційних технологій
Навчальна дисципліна: Системне програмування
Лабораторія: Системного програмування
Спеціальність 5.05010201 Обслуговування комп’ютерних систем і мереж
|
Розглянуто |
|
|
Затверджую Заступник директора з НВР ____________ Плешівський Я.М. “_____” ____________ 20___ р. |
на засіданні циклової комісії _______________________________ Протокол № ____ від _______ 20__ р. Голова циклової комісії __________ |
Інструкція до лабораторної роботи №5
"Дослідження команд: арифметичних, логічних і зсуву"
Склав
викладач ____________
Бохонко Б.А.
Львів 20__
Лабораторна робота № 5
Тема: Команди і директиви мови Асемблер.
Мета роботи: Набути навичок застосування асемблерних команд з реалізації арифметичних, логічних операцій і операцій зсуву. Засвоїти способи адресування операндів вказаних груп команд та алгоритми їх виконання.
Короткі теоретичні відомості
Арифметичні і логічні операції
Більшість арифметичних і логічних операцій впливають на регістр стану мікропроцесора (прапорці), структура якого зображена на рис.1.
Рисунок 1 – Структура регістру стану
Це 16-розрядний регістр, кожний біт якого називається прапорець (flag) і може приймати значення 1 або 0. Прапорці мають наступні назви і призначення:
Carry Flag (CF) – цей прапорець встановлюється в 1, коли має місце без знакове переповнення. Наприклад, якщо долавати байти 255 + 1 (результат виходить за діапазон 0...255). Якщо немає переповнення, то цей прапорець встановлений в 0.
Zero Flag (ZF) – встановлюється в 1, коли результат є ноль. Для ненульового результату цей прапорець встановлюється в 0.
Sign Flag (SF) – встановлюється в 1, коли результат є від’ємний. Для позитивного результату цей прапорець встановлюється в 0. Зауважимо, що цей прапорець приймає значення найстаршого значущого розряду.
Overflow Flag (OF) – встановлюється в 1, коли має місце знакове переповнення . Наприклад, якщо ви одаєте байти 100 + 50 (результат виходить за діапазон -128...127).
Parity Flag (PF) – цей прапорець встановлюється в 1, коли має місце парне число одиниць в результаті, і в 0 – коли має місце непарне число одиничних бітів. Навіть якщо результат є слово, то аналізується на парність тільки вісім молодших біт.
Auxiliary Flag (AF) – встановлюється в 1, коли має місце беззнакове переповнення молодшої чверті (4 біти).
Interrupt enable Flag (IF) – коли цей прапорець встановлений в 1 CPU реагує на переривання від зовнішніх пристроїв (біт дозволу переривання).
Direction Flag (DF) – цей прапорець використовується деякими командами для оброблення ланцюга даних, коли цей прапорець встановлений в 0 – обробка здійснюється вперед, коли цей прапорець встановлений в 1 обробька здійснюється назад.
Для відображення стану прапорців використовуються наступні позначення: 1 – команда встановлює цей прапорець в одиницю 1. 0 – команда встановлює цей прапорець в 0. r – значення прапорця залежить від результату виконання команди. ? – стан прапорця невизначений (може бути 1 або 0).
Арифметичні та логічні операції умовно поділяють на три групи. До першої групи входять команди: ADD, SUB, CMP, AND, TEST, OR, XOR Ці команди підтримують наступні формати:
REG, memory memory, REG REG, REG memory, immediate REG, immediate
REG (регістр загального призначення): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP. memory (адреса комірки пам’яті): [BX], [BX+SI+7], variable, etc... immediate (безпосереднє число): 5, -24, 3Fh, 10001101b, etc...
Після виконання операції між двома операндами результат завжди поміщається в перший операнд. Команди CMP і TEST тільки впливають на прапорець і не запам’ятовують результат.
Вказані вище команди впливають на наступні прапорці: CF, ZF, SF, OF, PF, AF.
Команди цієї групи виконують наступні дії:
ADD – додає другий операнд до першого;
SUB – віднімає другий операнд від першого;
CMP - віднімає другий операнд від першого тільки для прапорця (без збереження результату);
AND – логічна операція І (AND) між відповідними бітами двох операндів згідно з правилами:
1 AND 1 = 1 1 AND 0 = 0 0 AND 1 = 0 0 AND 0 = 0
Як бачимо, результат дорівнює одиниці тільки тоді, коли обидва біти рівні одиниці..
TEST – виконується так само як і AND, але тільки для прапорців;
OR - логічна операція АБО (OR) між відповідними бітами двох операндів згідно з правилами:
1 OR 1 = 1 1 OR 0 = 1 0 OR 1 = 1 0 OR 0 = 0
Як бачимо, якщо хоча б один з двох бітів дорівнює одиниці, то і результат дорівнює одиниці.
XOR - логічна операція виключаюче АБО (XOR) між відповідними бітами двох операндів згідно з правилами:
1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 1 = 1 0 XOR 0 = 0
Як бачимо, результат дорівнює одиниці, коли значення бітів є різними.
До другої групи входять команди: MUL, IMUL, DIV, IDIV Ці команди підтримують наступні операнди:
REG memory
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP. memory: [BX], [BX+SI+7], variable, і ін.. Команди MUL і IMUL впливають на стан наступних прапорців: CF, OF Якщо результат перевищує розмір операнду, то ці прапорці встановлюються в 1, а коли результат є меншим, то прапорці приймають значення 0. Для команд DIV і IDIV стан прапорців невизначений.
MUL – беззнакове множення:
коли operand є байт: AX = AL * operand.
коли operand є слово: (DX AX) = AX * operand.
IMUL – множення зі знаком:
коли operand є байт: AX = AL * operand.
коли operand є слово: (DX AX) = AX * operand.
DIV – беззнакове ділення:
коли operand є байт: AL = AX / operand AH = залишок (модуль).
коли operand є слово: AX = (DX AX) / operand DX = залишок (модуль).
IDIV – Ділення зі знаком:
коли operand є байт: AL = AX / operand AH = залишок (модуль).
коли operand є слово: AX = (DX AX) / operand DX = залишок (модуль).
До третьої групи входять команди: INC, DEC, NOT, NEG Ці команди підтримують наступні операнди:
REG memory
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP. memory: [BX], [BX+SI+7], variable, etc...
Команди INC, DEC впливають на прапорці: ZF, SF, OF, PF, AF; команда NEG – на прапорці: CF, ZF, SF, OF, PF, AF, а команда NOT не впливає на стан прапорців.
Функції деяких команд даної групи: .
NOT – інвертує кожний біт операнду;
NEG – перетворює операнд у число з протилежним знаком (two's complement). Це здійснюється інвертуванням кожного біту операнду з наступним арифметичним додаванням 1 до інвертованого числа. Наприклад, число 5 буде перетворене на -5, а -2 – на 2.