Строительный блокнот Развитие полупроводниковой электроники фика. Проще иметь в перечне пару команд, никогда не используемых, чем предусматривать специальные меры, запрещающие появление подобных комбинаций. Команда с кодом операции 0111 0110 не относится к рассматриваемому классу. Это команда останова (HLT), по которой прекращается выполнение каких бы то ни было операций. Последние восемь команд последней строки предусматривают передачу в регистр-аккумулятор содержимого любого из РОН (1лн ячейки памяти, адрес которой хранится в регистровой паре HL, или, наконец, содержимого того же регнстра-аккумулятора, но после инверсии. Что можно сказать после рассмотрения целой большой группы операций? Относясь к одной и той же группе, команды могут почти не отличаться или же отличаться очень сильно. Но главное их свойство состоит в том, что каждый код операции совершенно однозначно без каких-либо нечеткостей или необходимости обращения к дополнительной информации указывает ту последовательность действий, которая должна быть выполнена в микропроцессорной системе. Еще одно замечание. Команды систематизированы. Наличие системы долж-во было особенно ярко проявиться после того, как их записали в виде таблицы. Именно благодаря такой систематизации оказывается достаточно просто ориентироваться Б на первый взгляд подавляющем множестве различных команд. Стбит обратить внимание, что подобная систематизация и связанная с ней простота ориентации помогают не только людям, но и автоматическим системам, осуществляющим перевод текста с языка еще более высокого уровня на язык команд. Кроме рассмотренной имеются еще шесть семейств операций однобайтовыхг пересылок. Разберем их по порядку главным образом для того, чтобы потренироваться в чтении символики. Операции MVI R, D: D8-R. Здесь все читается просто. Прежде всего на-личие символа D8 означает, что сама команда имеет двухбайтовый формат. Смысл всего семейства операций означает, что операнд D8, т. е. содержимое второго байта команды, передается в регистр, нмя которого стоит на месте символа R. Всего таких команд восемь. Они позволяют записать операнд в любой из РОН в ячейку памяти, адрес которой хранится в регистровой паре HL, нли в регистр-аккумулятор. Сам мнемоннчеокий код MVI происходит от английских слов Move immediate , что означает переслать слово, входящее непосредственно в состав команды . Семейство операций STАХ YZ* : A-*M{YZ). Символом YZ* обозначается содержимое регистровой пары ВС илн DE, M(YZ)-ячейка памяти с адресом, помещенным в скобки после буквы М. В данном случае это ячейка памяти, адрес которой суть содержимое регистровой пары, имя которой помещено на место символов YZ. Остальное не требует комментариев. Содержимое регистра-аккумулятора передается в соответствующую ячейку памяти. Всего таких команд Две - соответственно двум возможным различным регистровым парам. Почему эти команды имеют однобайтовый формат? Последнее прояснится, если указать дополнительно, что согласно существующему условию регистровую пару (если известно, что это именно пара) можно именовать лишь именем первого регистра, т. е. в нашем случае мнемонические коды команд будут иметь вид либо ТАХ В, либо STAX D. Семейство команд LDAX YZ*: M{YZ)-A. Не требует комментариев. Семейство команд STA ADR: A-M{ADR). Оно состоит из одной-единствен- -48 81. ной команды е трехбайтовым форматом и также не требует комментариев. Со-держимое регистра-аккумулятора передается в ячейку памяти, адрес которой записан в 2 байтах самой команды. Команда LDA ADR : M{ADR)->A. Она по своему смыслу обратна предыду, щей. Команда SPHL : HL-SP. Она означает, что содержимое регистровой пары HL передается в регистр-указатель стека (см. рис. 2.7). Об этом регистре речь пойдет впереди. Его символическое обозначение SP образовано из начальных букв английских слов Stak pointer*, что и означает указатель стека . Следующую группу подкоманд составляют команды двухбайтовых пересылок. Здесь все то же самое, что н у только что рассмотренной подгруппы, с тем отличием, что пересылаются каждый раз не 1, а 2 байта. Символические обозначения первых трех команд двухбайтовых пересылок имеют следующи! вид: LXI YZ. D16:D16->-YZ\ SHLD ADR : HL-M {ADR), М (ADR -f 1); LHLD ADR:M(ADR), M(ADR+l)HL. Первая из этих команд не требует комментариев с тем исключением, что буквами YZ обозначается содержимое регистровых пар ВС, DE, HL или регист ра SP. По второй команде содержимое регистровой пары HL передается в две ячейки памяти с адресами ADR и ADR + 1. По добный прием является типовым. Во всех опера циях, выполняемых над словом длиной 2 байтя, если при этом участвует память, указывается ад рес одной ячейки, а обращение производится к Рис. 4 2. Регистр признаков У соседним. Третья команда по смыслу про- тйвоположнг предыдущим. Перед тем как перейти к обсуждению двух оставшихся команд рассматри Баемой подгруппы, сделаем небольшое отступление. В состав ЛЛУ процессора КР580ИК80А входит регистр признаков (регистр F), не показанный на рис. 2 7. Это обычный 8-разрядный регистр, каждый разряд которого имеет определен ное назначение. Эти назначения представлены на рис. 4.2. В первом разряде справа записывается признак переноса С. При выполнении общеизвестной операции сложения столбиком часто оказывается, что сумма двух складываемых цифр больше 9 (при двоичном сложении больше I). В этом случае запоминается единица (говорят один в уме ), н эта запомненная единица прибавляется затем к сумме двух следующих более старших цифр. Запомненная единица как бы переносится нз результата сложения двух младших цифр к более старшим. Соответствующая операция получила название операция переноса. Аналогично при выполнении операции вычитания может возникнуть необходимость занять единицу у более старшей цифры уменьшаемого. Здесь также выполняется операция обращения (переноса) к более старшим разрядам. Так БОТ, признаку С присваивается логическое значение I в том случае, когда потребность в операции переноса возникает при сложении (вычитании) старших (восьмых) разрядов двух 8-разрядных двоичных чисел. Поскольку за одним исключением, которое будет рассмотрено дальше, операции сложения й вычитания выполняются только над 8-разрядными двоичными числами, то единицу в уме , полученную при сложении (вычитании) двух старших цифр, не * яему прибавлять (неоткуда занимать). Она запнеывается в нулевой разряд регистра признаков и либо учитывается прн выполнении следующей операции, либо служит сигналом, привлекающим внимание автора программы к возникшей ситуации. В следующем (справа налево) разряде регистра признаков постоянно хранится единица. В третьем разряде хранится признак четности, обозначенный буквой Р. Этот признак принимает логическое значение 1, если число единиц в двоичном слове, хранящемся в регистре результата (регистре А), четное. Иначе он имеет значение 0. В четвертом н шестом разрядах регистра признаков постоянно хранятся нули. В пятом разряде записывается признак АС, представляюшлй собой признак вспомогательного переноса. Этот признак принимает логическое значение 1 в том случае, когда перенос возникает при выполнении сложения (вычитания) над четвертыми разрядами двоичных чисел. Признак Z, хранящийся в седьмом разряде регистра признаков, принимает логическое значение 1, когда в результате выполнения данной команды образуется слово 0000 0000 (содержимое регистра А равно 0). Наконец, признак S или признак знака принимает логическое значение 1, если в результате выполнения данной команды получается отрицательное число. Из сказанного ясно, что результат выполнения любой команды всегда состоит из двух частей: двоичного слова (чнела), поступившего в регистр результатов (регистр А), и двоичного слова, хранящегося в регистре признаков. Этв два слова, взятые вместе, получили название слово состояния программы. Действительно, содержимое регистра результатов и регистра признаков хотя н не полностью, но достаточно подробно характеризует то состояние, к которому привела последовательность операций на данный момент времени. По-английскн слово состояния программы - это Programme state words. Первые буквы этих трех слов дают сокращение PSW, которое используется в дальнейшем при символических описаниях команд. Теперь мы можем рассмотреть две оставшиеся команды двухбайтовых пересылок. Их символические описания имеют вид: PUSH YZ** -.YZ-MiSP - \), M{SP - 1); SP - 2-SP POP YZ** : M (SP), M(SP+ \)-YZ\ SP + 2-SP. Здесь через YZ** обозначено содержимое регистровой пары ВС, DE, HL или PSW. Команда PUSH предусматривает пересылку содержимого одной из перечисленных регистровых пар в две соседние ячейки памяти, адрес одной из которых SP-1, т. е. содержимое указателя стека минус 1, а адрес второй есть SP-2, т. е. содержимое указателя стека минус 2. При этом в регистр-указатель стека также засылается число SP-2. Это и есть типичная операция заполнения магазина илн стека. Для более ясного понимання ее сущности можно обратиться к рис. 4.3, где показана группа ячеек памяти с последовательными адресами л, n+i, п+2 в т. д. К моменту начала выполнения команды какая-то часть ячеек занята, а какая-то часть свободна. Занятые ячейки заштрихованы на рис. 4.3. Смысл магазинной (стековой) организации памяти состоит в том, что к моменту начала любой операции в регистре-указателе стека хранится адрес последней занятой ячейки. По команде PUSH заполняются две следующие по порядку ячейки, а в 4* 83
|