Строительный блокнот  Развитие полупроводниковой электроники 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [ 30 ] 31 32 33 34 35 36 37

следовательности в том случае, если номер нажатой кнопки (один операнд) совпадает с номером этажа (второй операнд). В противном случае осущест-вляется переход по программе к блоку 4. Предположим, что номер нажатой кнопки (эта информация более постоянна) хранится, например, в РОНВ, а номер этажа, на котором находится кабина (эта информация постоянно меняется, поскольку кабина движется), хранится в регистре результата. Тогда блоку 1 будет соответствовать следующая последовательность команд:

k:CMP R:

k+\:JNZ ADR.

Если номер кнопки и номер этажа не совпадают, логическое значение признака Z окажется равным нулю и команда JNZ ADR осуществит переход е первой команде блока 4 (рис. 1.2), относительно которой мы предположили, что она хранится в ячейке памяти с адресом ADR. В только что рассмотренном случае непосредственно перед выполнением команды условного перехода Мы выполнили специальную операцию, суть которой заключалась в проверке условия. Результат этой операции будет помещен в соответствующий разряд регистра признаков и затем использован при выполнении команды условного перехода.

На первый взгляд кажется, что регистр признаков лишний. Ведь с тея же успехом можно было использовать, скажем, содержимое регистра резуль тагов. Часто, однако, случается так, что специальной операции проверки условия выполнять не нужно. Такая проверка происходит сама по себе при выполнении очередного правила алгоритма. Поэтому целесообразен именно тот порядок действий, который принят в процессоре. Логические значения разрядов регистра признаков заполняются независимо от того, будет или не будет вслед за данной выполняться команда условного перехода. С другой стороны, вводя в программу очередную команду условного перехода, мы можем не заботиться о подготовке признаков. Здесь весьма ярко проявляются черты стандартизации, характерные для микропроцессорной техники.

При современном программировании часто пользуются подпрограммами С одним из возможных примеров подпрограммы мы познакомились, когда рас сматривали операции группового ввода. Тогда мы убедились, что при необхо-димости ввода группы слов ввод каждого отдельного слова требует выполнения последовательности операций, а значит и последовательности команд Такая последовательность команд и представляет собой подпрограмму. Другия примером подпрограммы может служить последовательность команд, задающая последовательность операций сложения, выполняемых при перемножении двух чисел. Вообще уровень программирования тем выше, чем в больших количествах и в большем объеме используются подпрограммы. Особенно важно* значение подпрограммы имеют именно в микропроцессорной технике, поскольку их можно хранить в относительно дешевых и в то же время быстродействующих ПЗУ и ППЗУ. Наконец, именно наличие подпрограмм делает возможный программирование на языках еще более высокого уровня, чем язык команд Об этом речь пойдет в дальнейшем.

Специальная подгруппа группы команд управления имеет своим назначением обращение к подпрограммам. Первая команда имеет вид

\) CALL ADR:PC-M{SP-\)\ M{SP-2); SP-2-SP;

ADR-PC.



Основное действие этой команды состоит в том, что величина ADR запи-енвается в счетчик адресов команд PC. При этом имеетси в виду, что ADR - это адрес первой команды подпрограммы. Однако в отличие от команд безусловного и условного переходов в данном случае основному действию предшествует подготовка, состоящая в том, что предыдущее содержимое счетчика адресов команд передается в ячейки памяти с адресами SP-1 и SP-2. Тем самым обеспечивается выход (или возврат) из подпрограмм. Любая подпрограмма обязательно заканчивается командой безусловного возврата, символическое описание которой имеет вид

2J RET: М (SP); М (SP + l)~*PC;

SP -f 2-SP.

Как видно из этого описания, после выполнения подпрограммы в счетчик адресов команд передается содержимое тех ячеек памяти, куда перед началом выполнения подпрограммы было помещено содержимое счетчика адресов команд. Благодаря этому основная программа, прерванная обращением к подпрограмме, может продолжиться с того самого места, на котором она была прервана. Кроме того, прн выполнении команды возврата содержимое указателя стека увеличивается на 2, т. е. опять-таки восстанавливается его исходное значение.

При выполнении команды CALL ADR в стек засылается лишь содержимое счетчика адресов команд, но не слово состояния программы. К моменту начала выполнения подпрограммы в регистре результата и регистре признака в общем случае находятся какие-то слова. Обычно так н бывает. Ведь подпрограмма должна выполняться над какими-то операндами, н первым из них оказывается как раз слово, хранящееся в регистре результата. Происходит как бы автоматическая передача информации нз программы в подпрограмму. В то же время можно представить ситуацию, когда подпрограмма исказит содержимое регистра результатов и регистра признаков и это сделает невозможным продолжение основной программы То, что мы обозначили как слово состояния программы (PSW), не сохраняется в стеке при выполнении команды обращения к подпрограмме. Если такое сохранение по тем нли иным соображениям необходимо. То перед командой обращения к подпрограмме надо выполнить команду PUSH PSW.

Кроме команд безусловного обращения к подпрограмме н безусловного возврата существуют их условные разновидности, символические описания которых имеют вид:

3) С-CON ADR: PC-M(SP - 1); M(SP - 2); SP-2-SP; ADR-PCI

4) R-CON: M (SP); M (SP + l)-.-PC; SP + 2-SP.

Из описания ясно, что по своему действию обе этн команды эквивалентны только что рассмотренным. Различие состоит в том, что выполняются они при удовлетворении одного нз восьми рассмотренных ранее условий. Наименование условия записывается на место родового имени CON точно так же, как это делалось для команды перехода по программе.

Наконец, еще одна разновидность команд обращения к подпрограммам имеет внд

Ъ) RSTX:PC.M(SP-l); M(SP-2); SP-2-.-SP; ADR-ySP.



Здесь число ADR зависит от конкретного значения числа X. Эта зависимость задается табл. 4.4. Иными словами, команда RST предусматривает обращение к подпрограмме, первая команда которой хранится не в любой, а в одной иэ восьми фиксированных ячеек памяти.

Таблица 4.4

Код операции

Код операции

RSTO

0000

RST 4

0020

RST 1

0008

RSTb

0028

RST 2

0010

RST 6

0030

RSTi

0018

RST 7

0038

Группа специальных команд. Эта группа состоит всего из четырех команд? Е1разрешение прерывании, DI - запрещение прерывания, HLT - останов в NOP - холостая операция. Смысл первых двух команд должен быть ясен читателю, если он не забыл того, что говорилось относительно маскирования прерываний. По команде останов, Я/.Г, прекращается выполнение каких бы то ев было операций, но сохраняется содержимое всех регистров. Наконец, по команде NOP операции не выполняются, но содержимое счетчиков адресов команд увеличивается на единицу и в следующем цикле выполняется следующая по порядку команда.

Завершая столь затянувшееся рассмотрение перечня операций, имеет смысл напомнить читателю, что, хотя мы почти все время имели дело с мнемонической записью кода операций, на самом деле код операции представляет собой двоичное слово, состоящее нз восьми двоичных символов (нулей и единиц).

4.3. Языки и уровни языков

Описание перечня команд понадобилось нам для того, чтобы дать возможность читателю досконально изучить возможности процессоров. Кроме того рассмотрение каждой группы команд позволило сформулировать некоторыБ общие принципы, отличающие современное состояние микропроцессорной техники. Знание перечня команд (имеется в виду, конечно, не знание наизусть, а, так сказать, общее знакомство) совершенно необходимо каждому, кто собирается работать с микропроцессорными комплектами. Но человек-программист никогда не пользуется командами. Он обращается с микропроцессорным комплектом на языке еще более высокого уровня. Таких уровней два. Ближе в языку команд расположены языки ассемблера, и на самом верху находится класс языков, для которых не придумано специального названия. Будем считать, что это языки самого высокого уровня.

Эти языки, как положено, имеют свой алфавит, в качестве которого, жав правило, используется латинский алфавит. Из символов алфавита составляются слова, а нз слов - фразы. При составлении фраз пользуются правилами грамматики. Эти правила имеют двоякое назначение. Во-первых, они помогают осуществить перевод иа язык более низкого уровня. Можно сказать и больше?



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [ 30 ] 31 32 33 34 35 36 37