Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_Lab5.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
211.97 Кб
Скачать

11

Міністерство освіти і науки, Молоді та спорту україни Львівський коледж Державного університету інформаційно-комунікаційних технологій

Навчальна дисципліна: Системне програмування

Лабораторія: Системного програмування

Спеціальність 5.05010201 Обслуговування комп’ютерних систем і мереж

Розглянуто

Затверджую

Заступник директора з НВР

____________ Плешівський Я.М.

“_____” ____________ 20___ р.

на засіданні циклової комісії

_______________________________

Протокол № ____ від _______ 20__ р.

Голова циклової комісії __________

Інструкція до лабораторної роботи №5

"Дослідження команд: арифметичних, логічних і зсуву"

Склав викладач

____________ Бохонко Б.А.

Львів 20__

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

Тема: Команди і директиви мови Асемблер.

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

  1. Короткі теоретичні відомості

    1. Арифметичні і логічні операції

Більшість арифметичних і логічних операцій впливають на регістр стану мікропроцесора (прапорці), структура якого зображена на рис.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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]