ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6841
Скачиваний: 51
416
этом случае программа в тот момент, когда ей потребуются входные данные, опросит состояние
клавиатуры и примет с нее данные. Однако для сложных современных программных систем такой
метод неудобен из-за существенного замедления времени реакции ЭВМ. В самом деле, если неко-
торая сложная программа занята вычислениями, а вы хотите ее прервать, то придется подождать,
пока процессор освободится и займется опросом клавиатуры (собственно говоря, тогда и преры-
вать-то будет нечего!). Все это сильно напоминает очередь в приемной бюрократа-начальника, ко-
гда люди вынуждены часами ждать, пока их вызовут для пятиминутного решения вопроса.
Для предотвращения подобных неприятностей во всех ЭВМ на базе МП наряду с про-
граммным опросом устройств ввода существует еще один механизм - механизм
прерывания от
внешних устройств.
Такие прерывания настолько широко используются в компьютерах, что име-
ет смысл рассмотреть их подробнее. Для понимания сути работы прерываний снова обратимся к
аналогии с руководителем. Пусть в его кабинете идет совещание по подведению итогов деятель-
ности предприятия, и в этот момент по телефону поступает очень важная информация, требующая
немедленного принятия решения. Как в таком случае обычно развиваются события? Секретарь, не
дожидаясь конца совещания, сообщает шефу о звонке. Тот, прервав свое выступление, снимает
трубку и выясняет суть дела. Затем он либо тут же принимает решение и сообщает его, либо пред-
лагает пока сделать самое необходимое, а после совещания обещает перезвонить и дать дальней-
шие указания. Затем (обратим внимание на эту деталь!) он произносит что-нибудь в духе «Так, на
чем мы остановились?» и продолжает совещание как ни в чем не бывало. Впрочем, если ситуация
экстренная, то совещание может быть прекращено или в его ход могут быть внесены определен-
ные коррективы.
Вернемся к компьютеру. Каждое его устройство (клавиатура, мышь, дисковод и др.) спо-
собно затребовать внимание процессора, выставляя сигнал требования прерывания. Процессор
проверяет наличие этого сигнала после выполнения каждой операции. «Увидев» требование пре-
рывания, МП немедленно начинает
его обрабатывать. Прежде всего, он запоминает свое текущее
состояние (счетчик команд и регистр состояния) с тем, чтобы в дальнейшем иметь возможность
продолжить выполнение прерванной программы. После этого происходит переход на программу,
обрабатывающую данное прерывание. Заметим, что все перечисленные действия реализуются на
аппаратном уровне, т.е. фактически являются «врожденными рефлексами» МП.
Программа обработки прерывания, получив управление, проводит оперативный анализ
причины прерывания. Если причина серьезная и требует немедленных действий, то эти действия
выполняются. Если же с обработкой можно подождать (например, просто нажата обычная сим-
вольная клавиша), в специальную область памяти (буфер) заносится информация о происшедшем
прерывании. Во всех случаях прерывания завершаются выполнением специальной команды воз-
врата, которая восстанавливает содержимое программного счетчика и регистра состояния, давая
тем самым микропроцессору возможность продолжить работу прерванной программы. Естествен-
но, что программа обработки прерывания должна была предварительно восстановить все испор-
ченные ей рабочие регистры МП.
Реальная картина, конечно, еще сложнее: прерывания от разных устройств имеют разные
уровни приоритета, существует возможность маскировки прерываний и т.п. Однако сути дела все
это существенно не меняет.
В последнее время необходимость понимания механизма работы прерываний сильно воз-
росла в связи с возникновением идеологии программирования по событиям. Она связана с распро-
странением среды «Windows» и лежит в основе систем типа «Visual Basic» или «Delphi». Приве-
дем примеры нескольких событий, на которые программа может реагировать: сдвинута мышь, на-
жата (или отпущена) клавиша мыши, нажата клавиша «ввод», выбран тот или иной пункт меню,
открыто новое окно на экране и многие-многие другие. Полный перечень событий занимает в опи-
сании несколько страниц. Интересно, что программа на таком языке уже не является единым це-
лым: на каждое событие пишется своя собственная программа, хотя все они и могут быть связаны
между собой.
Итак, мы рассмотрели наиболее общие принципы работы микропроцессоров вне зависимо-
сти от их модели. Теперь познакомимся с конкретными процессорами.
3.7. ПРИМЕР: СИСТЕМА КОМАНД ПРОЦЕССОРОВ СЕМЕЙСТВА PDP
417
В качестве примера реально существующего процессора, удобного для более детального
изучения, возьмем процессор серии машин, созданных фирмой DEC (США) и известных под на-
званием PDP-11 (в нашей стране аналогичные процессоры использовались в семействах 16-
разрядных мини- и микро-ЭВМ «Электроника», ДВК, БК, а также в школьном компьютерном
классе УКНЦ; всего таких машин было выпущено в СССР до 1,3 млн. штук и примерно столько
же в США). Это семейство мини- и микро-компьютеров - одно из самых долгоживущих: первая
машина этой серии была выпущена в 1970 г., а прекращение выпуска было запланировано фирмой
DEC на 1997 г.
Причина выбора процессора PDP для иллюстрации обсуждаемого вопроса состоит в том,
что система команд этого процессора построена на простых и наглядных принципах, изучив и за-
помнив которые уже можно составлять несложные программы. В то же время система команд
других процессоров, например, широко распространенных представителей семейства «Intel», уст-
роена значительно сложнее, требует запоминания большого количества справочных данных. В ка-
честве подтверждения сказанного достаточно указать, что в команде процессора PDP может быть
использован любой из имеющихся внутренних регистров, тогда как многие команды процессоров
«Intel» оперируют с фиксированными регистрами, не допуская альтернативного расположения
данных и результатов.
Процессор машин серии PDP и его отечественные аналоги (при дальнейшем изложении бу-
дем все это обширное семейство для краткости называть «процессор PDP») с точки зрения про-
граммиста устроен довольно просто. Он состоит из восьми
регистров общего назначения
(РОН) и
особого регистра,
в котором отображается текущее состояние процессора (в иностранной литера-
туре его принято обозначать PSW - Processor Status Word). Любой из регистров общего назначения
может быть использован в командах на равных основаниях. Вместе с тем имеются два выделен-
ных регистра, содержимое которых процессор использует для собственных нужд. Прежде всего
следует назвать регистр R7, выполняющий роль счетчика команд, в котором хранится адрес сле-
дующей инструкции программы. Другим выделенным регистром является указатель стека R6, ис-
пользуемый при запоминании информации в момент вызова подпрограмм и при переходе к обра-
ботке прерывания.
Остальные 6 регистров, обозначаемые RO, Rl. R2, R3, R4, R5, программист может полно-
стью использовать по своему усмотрению. Имеется только одно (непринципиальное) исключение:
в обширной системе команд PDP существует лишь единственная, и то достаточно экзотическая,
команда (MARK), работающая с регистром R5.
Следует отметить, что и выделенные регистры процессора R6 и R7 могут быть использова-
ны в любой команде наряду с обычными РОН RO-R5. Например, допускается переписать инфор-
мацию из R7 в R3 и тем самым сообщить программе адрес памяти, в котором находится следую-
щая команда программы. Такой прием очень часто используется программистами для автоматиче-
ской «самонастройки» на те адреса ОЗУ, в которых оказалась загруженной программа. Интересно,
что такого простого доступа к содержимому программного счетчика многие процессоры не име-
ют.
Рис. 4.14.
Схема регистра состояния процессора PDP
Регистр состояния процессора PSW, как и все РОН, является 16-битным. Его особенностью
является то, что каждый его бит имеет самостоятельное значение и может использоваться процес-
сором отдельно от других. В управляющих битах регистра постоянно отображается информация о
выполняемых результатах (отрицательность, равенство нулю и т.п.), а также о состоянии процес-
сора в данный момент (например, один из битов позволяет разрешать или запрещать обработку
прерывании). Из всех используемых битов (не все 16 бит регистра состояния задействованы!) наи-
более используемы два; их принято обозначать N и Z. Управляющий признак N (Negative) отража-
ет знак результата операций: если число отрицательное, то N
=
1, неотрицательное - N = 0. Бит Z
(Zero) говорит о равенстве или неравенстве нулю результата: в первом случае Z = 1, во втором - Z
= 0. Путем несложных рассуждений можно убедиться в том, что из шести известных математиче-
418
ских соотношений
=, < , > , ≤ , ≥ , ≠
четыре могут быть проанализированы по одному из признаков, а два оставшихся требуют совме-
стного анализа битов N и Z.
Другие управляющие биты, изображенные на рисунке, используются следующим образом.
Бит Р - задание маскировки прерываний от внешних устройств (Р = 0 -прерывание состоится. Р = 1
- замаскировано). Бит Т - «признак ловушки»; при Т = 1 после прерывания запускается специаль-
ная системная программа, позволяющая на этапе отладки текущей программы осуществлять ре-
жим трассировки. Бит V -признак переполнения разрядной сетки при арифметической операции
(если это произошло, устанавливается V = 1); бит С - аналогично при переполнении разрядной
сетки при логической операции, сопровождаемой сдвигом кода. Описанные управляющие призна-
ки широко используются для реализации разветвлений программы в зависимости от полученных
результатов, анализа причин прерываний и других действий.
Процессор PDP имеет достаточно удобный и широкий набор команд. Основная их часть
является двухадресными и одноадресными, т.е. они обрабатывают два или один операнд, соответ-
ственно. Для выполнения некоторых управляющих команд данные не требуются (например, ко-
манда остановки программы) - такие команды не содержат ссылок на операнды. Форматы одно- и
двухадресных команд изображены ниже на рис. 4.15.
КОП
КМА
N POH
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
КОП
KMA1
N POH1
KMA2
N POH2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Рис.4.15.
Формат одноадресной команды (вверху) и двухадресной (внизу). КОП - код операции.
КМА - код метода адресации, N РОН - номер регистра общего назначения (код адреса)
Примеры некоторых наиболее важных операций приведены в табл. 4.2. Действия, выпол-
няемые по простейшим арифметическим операциям, понятны из пояснений. В некоторых допол-
нительных пояснениях нуждаются только команды переходов.
Во-первых,
переходы
бывают
абсолютные
(на заданный адрес) и
относительные
(на опре-
деленное число команд относительно данной). Переходы первого типа более наглядны и могут
быть реализованы на любой адрес ОЗУ. Относительные переходы требуют вычисления адреса пе-
рехода, зато они не привязаны к конкретным адресам ОЗУ: программа, использующая относи-
тельные переходы, может работать в любом месте памяти. Относительные переходы занимают
меньше места в памяти, чем абсолютные; вследствие этого диапазон относительных переходов
ограничен (в процессоре PDP только на 127 слов вперед и 128 - назад).
Таблица 4.2
Наиболее важные команды процессора PDP
Мнемоника
команды
Содержание команды
Пояснения
HLT
Остановка
Выполнение программы прекращается
CLR А
Очистить А
А:=0 (в операнд А засылается 0)
INC А
Увеличить А на 1
А:=А+ 1 (значение А увеличивается на 1)
DEC A
Уменьшить А на 1
А:=А-1 (значение А уменьшается на 1)
MOV А,В
Переписать А в В
В:=А (В принимает значение А)
ADD A,B
Сложить А в В
В:=А + В (сумма помещается в В)
SUB A,B
Вычесть А из В
В:=В-А (разность помещается в В)
СМР А,В
Сравнить А с В
По знаку разности А-В устанавливаются
Управляющие биты; А и В сохраняются
419
JMP А
Безусловный переход к А
Безусловный переход по адресу А
BR К
Безусловный переход на К.
слов
Безусловный переход через К команд
BEQ К
Переход по = 0
Переход на К слов, если результат = 0
BNE К
Переход по
≠
0
Переход на К слов, если результат
≠
0
BPL К
Переход по ≥ 0
Переход на К слов, если результат ≥ 0
ВМ1 К
Переход по < 0
Переход на К. слов, если результат < 0
JSR А
Вызов подпрограммы по ад-
ресу А
Переход на адрес А с запоминанием ад-
реса возврата для команды RET
RET
Возврат из подпрограммы
Возврат на команду, следующую за вызо-
вом
подпрограммы
Во-вторых, переходы делятся на
безусловные
и
условные.
Безусловные, как. следует из на-
звания, происходят всегда. При выполнении условного перехода анализируются управляющие би-
ты. Переход происходит только в том случае, когда признаки имеют требуемые значения; в про-
тивном случае переход игнорируется и выполняется следующая за ним команда. Чаще всего ус-
ловному переходу предшествует команда сравнения, «подготавливающая» управляющие признаки
для анализа. Отметим, что команды BEQ и BNE проверяют значение признака Z, a BPL и BMI -
признака N.
В таблице у команд перехода для наглядности указаны адреса или величина смещения в
словах. Именно таким образом и кодируются команды в памяти ЭВМ. Однако при записи текстов
программ дело обычно обстоит несколько проще: в требуемых местах программы ставятся метки,
а расчет конкретных адресов и смещений машина производит самостоятельно (см. приводимые
ниже примеры).
В приведенных в таблице командах в качестве операндов фигурируют условные обозначе-
ния А и В. Расшифруем их. Система команд процессора PDP построена достаточно логично и за-
кономерно, поэтому любой операнд- и первый, и второй - в любой операции задается совершенно
одинаково. В PDP существует 8 различных способов задать местонахождение информации, тре-
бующейся для выполнения операции. Их принято называть
методами адресации,
и все они связа-
ны с различным использованием РОН. Наличие развитой системы методов адресации делает про-
граммирование для процессора PDP очень гибким и мощным.
Опишем коротко организацию основной памяти, контролируемой обсуждаемым микропро-
цессором. Основная адресация - байтовая; каждый байт имеет уникальный адрес. Так как процес-
сор является 16-разрядным, то объем контролируемого им номинально адресного пространства 64
кбайта; на деле программисту для размещения программы и данных доступно меньшее простран-
ство, так как 8 кбайт памяти зарезервировано для общения с внешними устройсгвами. Реально,
однако, с помощью специальных механизмов преобразования исполнительных адресов емкость
ОЗУ, доступную пользователю, делают значительно большей (детали рассматривать не будем).
Байт может быть операндом для некоторых команд. Однако, большая часть команд обраба-
тывает операнды длиной 2 байта - «слово». Слово состоит из двух соседних байтов; адресом слова
считается адрес младшего входящего в него байта.
Таблица 4.3
Некоторые способы указания операндов в командах
Название
Мнемо-
ника
Пояснение
Регистровая
Косвенно-регистровая
Автоинрементная
Автодекрементная
Rn
(Rn)
(Rn)+
-(Rn)
Операнд в регистре Rn
Операнд в ячейке ОЗУ, адрес которой в Rn
То же, но после чтения Rn увеличивается на 1
То же, но перед чтением Rn уменьшается на 1
В качестве иллюстрации разберем выполнение команды MOV(R1)+,RO
По этой команде сначала считывается информация из памяти по адресу, находящемуся в
R1. После чтения значение R1 автоматически увеличивается, так что при последующем выполне-
420
нии данной команды будет обрабатываться следующая ячейка. Операция завершается записью
считанной из ОЗУ информации в регистр R0.
Из разобранного примера отчетливо видно, что имеющиеся у процессора PDP способы ад-
ресации позволяют удобно работать не только с одиночными данными, но и с массивами последо-
вательно хранящейся в памяти информации. Кроме того, некоторые приемы использования счет-
чика команд R7 в качестве РОН могут давать еще более интересные эффекты. Пусть, например, в
некоторой программе встречается команда
MOV (R7) + , R2
и в следующем за ней слове хранится число 6. Учитывая, что после извлечения команды из ОЗУ
счетчик R7 немедленно увеличивается, в момент выполнения команды его содержимое уже пока-
зывает на слово памяти, где хранится число 6. Следовательно, в качестве операнда (R7) будет счи-
тано именно оно, и, кроме того, R7 автоматически «передвинется» на следующую за константой
ячейку благодаря автоинкрементному способу адресация. Таким образом, описанный прием по-
зволяет использовать в качестве операнда константу, хранящуюся непосредственно в команде. За-
вершая обсуждения основных принципов программирования процессора PDP. приведем примеры
линейного, разветвляющегося и циклического фрагмента программы.
Пример I.
Программа вычисления по формулам R1:=R2+R3; R4:=R3-R2.
Программа 131
MOV R2, Rl
; сразу складывать нельзя, так как сумма заменяет
;второй операнд
ADD R3, Rl
MOV R3, R4
SUB R2, R4
HLT
Пример
2. В Rl и R2 хранятся некоторые числа. Поместить большее из них в R5, а меньшее-
в RO.
Программа 132
СМР Rl, R2
;сравнить Rl и R2
BPL L1
;переход при R1≥R2, если R2>R1
MOV Rl, R0
MOV R2, R5
BR L2
;если R1>R2
LI: MOV Rl, R5
MOV R2, R0
L2: HLT
Примечание.
В тексте программы указаны переходы на метки, но в результате трансляции
они будут автоматически преобразованы в переходы через заданное число слов.
Пример 3.
Пусть в Rl задан начальный адрес массива ОЗУ, а в R2 - число ячеек в нем. Вы-
числить сумму элементов массива.
Программа 133
CLR R0
;очистка суммы
LI: ADD (Rl) + , R0 ;добавить к сумме очередной элемент
DEC R2
;уменьшить на единицу число оставшихся элементов
BNE L1
;цикл, пока не останется 0 элементов
HLT
Примечание.
В программе используется тот факт, что команда DEC автоматически сравни-