Строительный блокнот Развитие полупроводниковой электроники указатель стека снова помещается число (в данном случае 5Р-2), представляющее собой адрес последней заполненной ячейки. Смысл пятой, последней из команд в рассматриваемой подгруппе (команда POP) противоположен предыдущей. По этой команде содержимое двух последовательных ячеек памяти с адресами SP и SP-f 1 передается в соответствующую регистровую пару. Число, хранящееся в регистре-указателе стека, при этом увеличивается на 2. Для полного уяснения смысла этой операции полезно снова обратиться к рис. 4.3. К командам пересылок относятся также команды обмена байтами. Символические описания этих команд приводятся далее и пе требуют комментариев; XCHG: hlDE; XTHL : Н-М (-SP + 1), L-M (SP). Команды арифметических и логических операций. Эта группа в свою очередь делится на четыре подгруппы. К первой подгруппе относятся арифметические и логические операции с одним операндом. Первые три из ннх имеют Следующие символические описания: 1) CMC : С-*С; 2) STC: lS; 3) СЛ1Л:ЛЛ. По первой команде логическое значение признака переноса С т. е. заменяется на противоположное. SP-f / SP-2 Сюда запи-оываетея YZ** инвертируется, Следует заметить, что в символическом описании этой команды допущена неоднозначность, совершенно неприемлемая при любых формальных описаниях. Буквой С в одних случаях обозначается один из РОН, а в других - признак не-реноса. Поскольку мы передаем реальный перечень команд именно так, как он описывается в заводских инструкциях и другой подобной литературе, нам не остается ничего другого, как повторить эту неоднозначность, принеся читателю соответствующие извинения. По второй команде логическое значение признака переноса устанавливается равным 1, по третьей - инвертируется все содержимое регистра результата А. Несколько особо стоит команда десятичной коррекции DAA. Эта команда используется при выполнении арифметических операций сложения и вычитания над десятичными числами. Желающих более подробно ознакомиться со смыслом этой команды отсылаем к [5]. Подгруппу команд с одним операндом завершают четыре команды, символические описания которых имеют вид: Ь) INR R:R+ \-R; 84 /7-ьг+5 /7+2 Ркс. 4.3. памяти Ячейки магазинной (стековой) 6) DEQ R i R-l-R; 7) ISX YZ:YZ+\-*YZ; ) DCX YZ: YZ~l-YZ; Легко видеть, что эти команды предусматривают увеличение или уменьшение I ва единицу соответствующего 8- или 16-разрядного числа. При выполнении пя-: той Е шеетой команд могут изменяться логические значения всех признаков, кроме признака переноса С. Следуювую подгруппу составляют арифметические и логические операции двумя операндами. Символические описания первых четырех из них имеют ; аид5 1 ADD R:A + R-A; 2) ADC RiA+R + C-i-A; 3) SUB R:A-R-A; 4} SBB R:A-R-C-A. Арифметическая операция всегда выполняется над двумя числами, одно из которых хранится в регистре результата, а второй - в одном из РОН. Результат во всех случаях засылается в регистр результата. При выполнении второй и четвертой команд учитывается также значение признака переноса С. Здесь снова допускается уже отмеченная нами неоднозначность. Символическое описание следующих трех команд рассматриваемой подгруппы имеет внд: 5) ANA R:AAR.A; 6) ORA R:A\/R-A; 7} XRA R:A®R--A. Первая из них - команда, предусматривающая выполнение логической операции И над восемью парами разрядов двух слов. Порядок выполнения логической операции И над одной парой разрядов был рассмотрен в гл. 3 и иллюстрировался таблицей на рис. 3.4,в. Шестая команда предусматривает выполне-, ние логической операции ИЛИ над восемью парами разрядов двух слов. Логическая операция ИЛИ также была рассмотрена в следующей главе, и порядок ее выполнения иллюстрируется рис. 3.4,6. Наконец, седьмая команда предусматривает выполнение над восемью парами разрядов двух слов логической операции ИСКЛЮЧАЮЩЕЕ ИЛИ (ее более правильно называют суммирование по модулю 2 ). Порядок выполнения этой операции над одной парой разрядов описывается табл. 4.2. Для большей ясности приведем пример выполне- Таблица 4.2 Таблица 4.3
ния всех трех только что рассмотренных логических операвдй над восемью парами разрядов двух слов. Этот пример сведен в табл. 4.3. Следующие четыре команды аналогичны командам 1) -4) рассматриваемой подгруппы о тем единственным отличием, что в качестве второго операнда используется 1 байт (D8) двухбайтовой команды: 8) ADI D8:A + D8-*A; 9) ACI D8:A + D8 + С-А; 10) SUI D8:A-D8-A; 11) SBl D8: A - D8 - C-A. При выполнении следующих трех команд: 12) AN1 D8:A/\D8-A; 13) ORI D8: AyD8-*A; 14) XRI DS-.ADS--A опять-таки в качестве второго операнда используется 1 байт двухбайтовой команды. Следующие две команды рассматриваемой подгруппы - команды сравнения. Первая из них (15-я по счету), имеющая мнемоническое описание CPI D8, предусматривает сравнение двух чисел, одно из которых хранится в регистре результатов, а второе -представляет собой байт D8 двухбайтовой команды. Если в результате выполнения операции оказывается, что числа равны, то признаку нуля Z присваивается значение 1. Если же число, хранимое в регистре результата, окажется меньше операнда D8, то логическое значение 1 присваивается признаку переноса С. Последняя (16-я) команда рассматриваемой подгруппы СМР R аналогична предыдущей о тем различием, что в качестве второго операнда используется содержимое одного из РОН. Следующая по порядку подгруппа состоит нз одной команды: DAD YZ:HL + YZ-HL, предусматривающей выполнение операции сложения над двумя 16-разрядными (двухбайтовыми) двоичными числами. Смысл этой команды раскрывается ее символическим описанием. Напомним, что под YZ мы понимаем содержимое регистровых пар ВС, DE, HL или регистра SP. В отличие от команд предыдущей подгруппы, при выполнении которых могут изменяться логические значения всех признаков, при выполнении данной команды может изменяться лишь значение признака переноса С. Последнюю подгруппу группы арифметических и логических команд составляют четыре команды: RAR, RRC, RAL и RLC, - предусматривающие выполнение операции сдвига содержимого регистра результатов. Порядок выполнения этих команд ясен из рис. 4.4. В каждом из четырех случаев логическое значение данного разряда заменяется логическим значением соседнего разряда. При командах RAR и RR.C подобная замена производится слева направо. Соответствующие операции так и называются сдвиг вправо . Существенная подробность состоит в том, что при сдвиге вправо логическое значение крайнего правого разряда присваивается признаку переноса С. Прн выполнении сдвига вправо в общем случае непонятно, каким должно стать логическое значение крайнего левого разряда регистра. При выполнении
|