Ликбез - Ассемблер взгляд издалека: Логические операции, Операции AND, OR,XOR,NOT; мнемоники. Результаты действия команд.
Программирование2640, Ассемблер1600, Z801317, Регистры143, Ликбез62, Учебный материал23, XOR19, Флаги19, Логические операции9, AND8, OR7, Аккумулятор6
Ассемблер: взгляд издалека
{}Инфарх
Продолжение. Начало - в || 20, 21
Логические операции
Разобравшись в прошлый раз с арифмети-
ческими операциями, перейдём к операциям
логическим. В отличие от Бейсика, в Ас-
семблере они столь же важны.
Тем, кто не знаком с алгеброй логики,
скажу, что её главное отличие от обыкно-
венной арифметики состоит в том, что в ней
действия производятся не над всем числом,
а над его битами - т.е. перенос из разряда
в разряд не производится.
Процессор Z80 способен совершать следую-
щие логические операции:
AND
OR
XOR
NOT
Но не ищите в таблицах мнемоник команду
NOT - она записывается как "CPL".
А разобраться в назначении каждой логи-
ческой операции нам поможет таблица истин-
ности.
Операция AND
┌───────────┐
│ AND │
├───┬───┬───┤
│ A │ B │ Y │
├───┼───┼───┤
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 0 │
│ 1 │ 0 │ 0 │
│ 1 │ 1 │ 1 │
└───┴───┴───┘
Символами A и B обозначены операнды, а Y
- это результат.
В английском языке "AND" означает "И".
В качестве микросхемы, выполняющей эту
функцию, можно привести 555ЛИ1.
Суть операции "И" (логического умноже-
ния) можно уяснить из следующего примера.
Обозначим прочтение вами моей статьи че-
рез Y = 1, а непрочтение - через Y = 0.
Для получения результата вам необходимо
выполнить две операции:
- загрузить в ваш Спекки "Оптрон" |24
(если да, то A = 1, а если нет, то A = 0);
- найти в "Оптроне" рубрику ЛИКБЕЗ (со-
ответственно, B = 1 или B = 0).
Итак, для получения в качестве результа-
та логической "1" оба операнда также
должны быть равны логической "1".
Вот уравнение этой операции:
Y = A*B
Операция OR
"OR" в переводе означает "ИЛИ". Эту опе-
рацию называют также "логическое сложени-
е". Снова обратимся к примеру.
Чтобы ознакомится с моими текстами в
"Оптроне" |24 (т.е. получить Y = 1), вам
необходимо выбрать рубрики ЛИКБЕЗ (A = 1)
или ЛИТСТРАНИЧКА (B = 1). Ясно, что для
получения положительного результата, еди-
нице должен быть равен или А, или В, или
оба вместе.
Вот - таблица истинности для этой опера-
ции:
┌───────────┐
│ OR │
├───┬───┬───┤
│ A │ B │ Y │
├───┼───┼───┤
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 1 │
│ 1 │ 0 │ 1 │
│ 1 │ 1 │ 1 │
└───┴───┴───┘
А вот - её уравнение:
Y = A + B
А пример из микросхемотехники - 555ЛЛ1.
Операция XOR
Это - ИСКЛЮЧАЮЩЕЕ ИЛИ.
Снова привожу пример.
Если вы вздумаете, читая мою статью, ОД-
НОВРЕМЕННО поиграть в "Чёрный Ворон", то я
скажу:
"Нет, голубчики, за двумя зайцами пого-
нишься - ни одного не поймаешь! Y = 0!"
Соответсвенно - и таблица истинности:
┌───────────┐
│ XOR │
├───┬───┬───┤
│ A │ B │ Y │
├───┼───┼───┤
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 1 │
│ 1 │ 0 │ 1 │
│ 1 │ 1 │ 0 │
└───┴───┴───┘
В обычной арифметике эта операция из-
вестна как "суммирование по модулю 2":
1 + 1 = 0
Точно так же в десятичной системе счис-
ления при "суммировании по модулю 10":
9 + 1 = 0
(При "сложении по модулю" перенос "оста-
ётся в уме").
Операция NOT
"NOT" означает "НЕ". Эта операция - не
простая, а очень простая. Она производится
только над одним операндом и меняет его
значение на противоположное:
┌───────┐
│ NOT │
├───┬───┤
│ A │ Y │
├───┼───┤
│ 0 │ 1 │
│ 1 │ 0 │
└───┴───┘
Для любителей уравнений:
_
Y = A
Для "железячников": 555ЛН1.
Перейдем к мнемоникам
Воздействие арифметических операций на
флаговый регистр, напомню, вопросов не вы-
зывает... Но на то она и логика, чтобы
мозги процессору парить! Так что теперь,
рассматривая варианты мнемоник, будем ука-
зывать влияние логических операций на фла-
ги:
╔═════════════╤═══════════════════╗
║ МНЕМОНИКА │Разряды регистра F ║
║ │ (флаги) ║
╟────┬────────┼───────────────────╢
║Опе-│ │ ║
║ ра-│Операнд │ C Z P/V S N H ║
║ ция│ │ ║
╟────┴────────┼───────────────────╢
║ AND r │ 0 x P x 0 1 ║
║ AND (HL) │ ║
║ AND n │ ║
║ AND (ii+n) │ ║
║ │ ║
║ OR r │ 0 x P x 0 0 ║
║ OR (HL) │ ║
║ OR n │ ║
║ OR (ii+n) │ ║
║ │ ║
║ XOR r │ 0 x P x 0 0 ║
║ XOR (HL) │ ║
║ XOR n │ ║
║ XOR (ii+n) │ ║
║ │ ║
║ CPL │ . . . . 1 1 ║
╚═════════════╧═══════════════════╝
Пояснения:
Операции ВСЕГДА производятся над операн-
дом, указанным в таблице, и содержимым ак-
кумулятора;
"." - флаг не меняется в результате опе-
рации;
"x" - флаг устанавливается в зависимости
от результата операции;
прочие обозначения - см. |21.
Результаты действия команд (примеры)
При выполнении команды
AND E
имеет место операция "И" над содержимым
регистров "А" и "Е". Допустим, они имеют
следующие значения:
A = 10011010
E = 01111001
В этом случае мы, согласно таблице ис-
тинности для AND, получим:
1 0 0 1 1 0 1 0
AND
0 1 1 1 1 0 0 1
───────────────
0 0 0 1 1 0 0 0
Результат "00011000" заносится в аккуму-
лятор. "E" своего значения не меняет.
Точно так же при выполнении команд
OR
и
XOR
с теми же значениями операндов получим:
1 0 0 1 1 0 1 0
OR
0 1 1 1 1 0 0 1
───────────────
1 1 1 1 1 0 1 1
1 0 0 1 1 0 1 0
XOR
0 1 1 1 1 0 0 1
───────────────
1 1 1 0 0 0 1 1
Команда "CPL" (операция "NOT", не забы-
ли?) производится над одним операндом -
содержимым регистра "A". Вот что будет
после её выполнения:
1 0 0 1 1 0 1 0
CPL ───────────────
0 1 1 0 0 1 0 1
С логическими операциями - всё. Продол-
жение следует.
──══════════──
Другие статьи номера:
|
|
|
|
Ликбез - Ассемблер взгляд издалека: Логические операции, Операции AND, OR,XOR,NOT; мнемоники. Результаты действия команд.
|
|
|
|
|
|
|