Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие_Вычисл техн и микропроц_Часть1_...doc
Скачиваний:
17
Добавлен:
04.05.2019
Размер:
3.06 Mб
Скачать

Команди логічних операцій

До цієї групи команд відносяться команди, які при роботі використовують правила алгебри логіки. До таких команд відносяться команди, яки виконують логічні операції над операндами, команди обробки біт і команди зсувів.

Логічні операції мови Асемблер-86:

AND (logical AND) – команда логічного множення операндів (кон’юнкція).

OR (logical OR) – команда логічного додавання операндів (диз’юнкція).

XOR (logical eXclusive OR) – логічне виключне АБО.

TEST (TEST operand) – логічне ТА. Використовується для логічного порівняння операндів.

NOT (NOT operand) – інвертування операнда.

Узагальнене представлення логічних команд має вигляд:

AND dst,src.

OR dst,src.

XOR dst,src.

TEST dst,src.

NOT src.

В усіх командах операндами можуть бути 8-, 16-, 32-розрядні регістри загального призначення і пам’ять з відповідною кількістю комірок. Операнд src (джерело) також може бути представлено безпосереднім числом (крім команди NOT).

Команди AND, OR, XOR, TEST змінюють прапорці таким чином:

OF і CF – завжди установлюються у нульовий стан;

SF, ZF, PF – установлюються відповідно до результату за тими самими правилами, що і для арифметичних операцій;

AF – не визначається.

Команди зсувів поділяються на арифметичні і логічні. Для логічних зсувів характерно, що біт, який виходить за межі регістра втрачається, а на місто біта, який зсунувся, у регістр записується 0. При виконанні арифметичних зсувів праворуч знаковий біт не втрачається, а зберігається у сусідньому, тим самим зберігаючи знак числа.

Асемблер включає такі команди зсувів:

SHL (Shift logical Left) – зсунути логічно ліворуч;

SAL (Shift Arithmetic operand Left) – зсунути арифметично ліворуч;

SHR (Shift logical Right) – зсунути логічно праворуч;

SAR (Shift Arithmetic operand Right) – зсунути арифметично праворуч;

RCL (Rotate operand through Carry flag Left) – зсунути циклічно ліворуч через перенесення;

RCR (Rotate operand through Carry flag Right) – зсунути циклічно праворуч через перенесення;

ROL (Rotate operand Left) – зсунути циклічно ліворуч;

ROR (Rotate operand Right) – зсунути циклічно праворуч.

Пояснення алгоритму роботи і синтаксис кожної з команд зсувів подано у табл. 9.3.

У таблиці прийнято умовні позначення: opr – операнд (регістр або комірка пам’яті, вміст яких зсувається); cnt– кількість зсувів (може приймати значення 1 або задаватися вмістом регістра-лічильника CL).

Таблиця 9.3 – Команди зсувів

Мнемоніка та формат команди

Опис виконання

SHL opr,cnt

SAL opr,cnt

SHR opr,cnt

SAR opr,cnt

RCL opr,cnt

RCR opr,cnt

ROL opr,cnt

ROR opr,cnt

opr

Контрольні запитання:

  1. Які команди додавання операндів у мові Асемблер Ви знаєте? Чим вони відрізняються одна від одної?

  2. Чим різняться команди SUB і SBB? Поясніть на прикладі.

  3. Як виконується команда DEC CX?

  4. Як виконується команда MUL і в яких регістрах може розміщуватися операнд src (джерело) і операнд dst (приймач)?

  5. Як виконується команда DIV і в яких регістрах може розміщуватися операнд src (джерело) і операнд dst (приймач)?

  6. Для чого у командах ділення використовується команда CWD?

  7. Для чого використовується команда СМР? Де розміщується результат виконання цієї команди?

  8. Які команди логічних операцій Ви знаєте?

  9. Який результат буде отримано при виконанні фрагмента програми:

MOV AX,AFH

SHL AX,1

  1. Який результат буде отримано при виконанні фрагмента програми:

MOV AX,AFH

ROR AX,1

  1. Який результат буде отримано при виконанні фрагмента програми:

MOV AX,AFH

RCL AX,1

Контрольні запитання підвищеної складності:

  1. Чому при виконанні арифметичних команд над двійково-десятковими числами виникає потреба у корекції результату?

  2. Як виконується корекція результату при виконанні арифметичних команд над двійково-десятковими числами?

  3. Які прапорці формуються при виконанні логічних операцій?

  4. Які команди зсувів можливо використовувати в якості команд множення і ділення на 2?