Ассемблер: взгляд издалека {}Инфарх Продолжение. Начало - в || 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 С логическими операциями - всё. Продол- жение следует. ──══════════──