Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.orgfree.com

emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.


Учебные модели компьютера



Модели (software):

"Е14" (parallel !!!)
"S9PU" (parallel)

Модели (hardware):






Награды сайта
Награды сайта 2005

Система команд процессоров семейства PDP

Итак, в предыдущих разделах мы познакомились с наиболее общими принципами работа микропроцессоров вне зависимости от их модели. Настала пора посмотреть, как эти принципы реализуются в конкретном МП.

Дальнейшее знакомство с работой МП можно построить двумя способами: либо поверхностно, не вдаваясь в детали, изучить реально существующий процессор (при этом следует помнить, что через пару лет МП будут похожие, но другие), либо попытаться собрать наиболее характерные черты микропроцессоров в хорошую учебную модель и подробнее изучить ее. По мнению автора, второй подход более удобный. Учебному процессору будет посвящена следующая глава, а пока рассмотрим альтернативный подход - краткое изучение реального МП.

В качестве примера процессора, наиболее подходящего для изучения, удобнее всего взять процессор серии машин под названием PDP. В нашей стране аналогичные процессоры использовались в семействах "ДВК", "БК", а также в типовом школьном компьютерном классе "УКНЦ". При дальнейшем изложении будем все это обширное семейство для краткости называть общим собирательным термином процессор PDP. Именно этот тип МП был предложен для изучения родоначальником отечественной школьной информатики А.П.Ершовым [9,10].

Причина такого выбора состоит в том, что система команд этого процессора построена на простых и наглядных принципах, изучив и запомнив которые уже можно составлять несложные программы. В то же время система команд других процессоров, например, широко распространенных представителей семейства INTEL, устроена значительно сложнее и менее логично, требует запоминания большого количества справочных данных. В качестве подтверждения сказанного достаточно указать, что в команде процессора PDP может быть использован любой из имеющихся внутренних регистров, тогда как многие команды процессоров INTEL оперируют с фиксированными регистрами, не допуская альтернативного расположения данных и результатов.

Имеется большое количество литературы по вопросам устройства и программирования процессора машин семейства PDP; чаще всего для ее чтения требуется некоторая предварительная подготовка. Можно порекомендовать начать такую подготовку с серии популярных статей Ю.А.Зальцмана в журнале "Информатика и образование" [11] (в первом из журналов, кстати, подобран хороший список литературы). По правде говоря, в глубине души автор тайно надеется, что те, кто внимательно прочитал предыдущие разделы пособия, уже не нуждаются в дополнительных сведениях.


Итак, перейдем к изучению процессора машин серии PDP. С точки зрения программиста он состоит из восьми 16-разрядных регистров общего назначения (РОН) и особого регистра, в котором отображается текущее состояние процессора (в иностранной литературе его принято обозначать PSW - Processor Status Word).

Любой из регистров общего назначения может использоваться в командах на равных основаниях. Вместе с тем имеется два выделенных регистра, содержимое которых процессор использует для собственных нужд. Прежде всего следует назвать регистр R7, выполняющий роль счетчика команд (вспомните основной цикл работы процессора - п.1.5). Другим выделенным регистром является указатель стека R6; назначение указателя стека подробно объяснялось в п.2.4.

Остальные 6 регистров, обозначаемые R0-R5, программист может полностью использовать по своему усмотрению. Имеется только одно непринципиальное исключение: в обширной системе команд PDP существует лишь единственная, и то достаточно экзотическая команда - MARK, работающая с регистром R5.

Уместно заметить, что выделенные регистры процессора R6 и R7 могут использоваться в любой команде наряду с обычными РОН R0-R5. Например, допускается переписать информацию из R7 в R3 и тем самым сообщить программе адрес памяти, в котором находится следующая команда программы. Такой прием очень часто используется программистами для автоматической "самонастройки" на те адреса ОЗУ, в которых оказалась загружена программа. Интересно, что такого простого доступа к содержимому программного счетчика многие процессоры не имеют.

Регистр состояния процессора PSW как и все РОН является 16-битным. Его особенностью является то, что каждый его бит имеет самостоятельное значение и может использоваться процессором отдельно от других. В управляющих битах регистра постоянно отображается информация о результатах выполняемых операций (отрицательность, равенство нулю и т.п.), а также о состоянии процессора в данный момент (например, один из битов позволяет разрешать или запрещать обработку прерываний). Не все 16 битов регистра состояния задействованы; из тех, что используются, наибольшую известность получили два; их принято обозначать N и Z. Управляющий признак N (Negative) характеризует наличие знака минус у результата операций: если число отрицательное, то N=1, в случае неотрицательного значения N=0. Бит Z (Zero) говорит о равенстве или неравенстве нулю результата: в первом случае Z=1, иначе Z=0. Путем несложных рассуждений читатель может убедиться, что из 6 известных математических соотношений (больше, меньше, равно и т.д.) 4 могут быть проанализированы по одному из признаков, а 2 оставшихся требуют совместного анализа битов N и Z. Описанные управляющие признаки широко используются для реализации разветвлений программы в зависимости от полученных результатов.

Имеется и еще один важный управляющий бит, обозначаемый C (от английского Carry - перенос). Он активно используется при многоразрядных вычислениях и некоторых полезных вариантах сдвигов, что позволяет существенно упростить многие программы анализа двоичного кода. Тем не менее, в простейших случаях без него вполне удается обходиться и мы его изучать пока не будем.


Процессор PDP имеет достаточно удобный и широкий набор команд. Основная их часть является двухадресными или одноадресными, т.е. они обрабатывают два или один операнд соответственно. Для выполнения некоторых управляющих команд данные не требуются (например, команда остановки программы) - такие команды не содержат ссылок на операнды.

Примеры некоторых наиболее важных операций приводятся в таблице.


НЕКОТОРЫЕ НАИБОЛЕЕ ВАЖНЫЕ КОМАНДЫ ПРОЦЕССОРА PDP
Мнемоника
команды
Название команды Пояснения
HLTостановвыполнение программы прекращается
CLR AочиститьА:=0 - в операнд А засылается 0
INC Aувеличить на 1А:=А+1 - значение А увеличивается на 1
DEC Aуменьшить на 1A:=А-1 - значение А уменьшается на 1
COM AдополнитьA:=NOT A - значение А инвертируется
MOV A,BпереписатьВ:=А - В принимает значение А
ADD A,BсложитьВ:=В+A - сумма помещается в В
SUB A,BвычестьВ:=В-А - в В помещается разность
BIC A,Bочистить битыB:=B AND (NOT A) - в B помещается результат
BIS A,Bустановить битыB:=B OR A - в B помещается результат ИЛИ
CMP A,Bсравнитьпо А-В устанавливаются управляющие биты; A и В сохраняются
JMP Aбезусловный переход по адресубезусловный переход к адресу А
BR Кбезусловный переход по смещениюбезусловный переход через К слов
BEQ Кпереход по =0переход на К слов, если результат =0
BNE Кпереход по <>0переход на К слов, если результат <>0
BPL Кпереход по >=0переход на К слов, если результат >=0
BMI Кпереход по <0переход на К слов, если результат <0
JSR Aвызов подпрограммыпереход на адрес А с запоминанием адреса возврата для команды RET
RETвозврат из подпрограммывозврат на команду, следующую за вызовом подпрограммы

Действия, выполняемые по простейшим арифметическим и логическим операциям понятны из пояснений в таблице. В некоторых дополнительных пояснениях нуждаются только команды переходов.

Во-первых, переходы бывают абсолютные (на заданный адрес) и относительные (на определенное число команд относительно данной). Переходы первого типа более наглядны и могут быть реализованы на любой адрес ОЗУ. Относительные переходы требуют вычисления адреса перехода, зато они не привязаны к конкретным адресам ОЗУ: программа, использующая относительные переходы, может работать без изменений в любом месте памяти. Относительные переходы занимают меньше места в памяти, чем абсолютные; вследствие этого диапазон относительных переходов ограничен (в процессоре PDP только на 127 слов вперед и 128 назад).

Во-вторых, переходы делятся на безусловные и условные. Безусловные, как следует из названия, происходят всегда. При выполнении условного перехода анализируются управляющие биты: переход происходит только в том случае, когда признаки имеют требуемые значения; в противном случае переход игнорируется и выполняется следующая за ним команда. Отметим, что команды BEQ и BNE проверяют значение управляющего бита Z, а BPL и BMI - N.

Чаще всего условному переходу предшествует команда сравнения, "подготавливающая" управляющие признаки для анализа.

В двоичном коде команды перехода требуется указывать конкретное значение адреса или величину смещения в словах, что при написании программ требует определенных вычислений. К счастью они достаточно просты и их вполне можно "перепоручить" компьютеру. Поэтому при использовании большинства систем программирования в требуемых местах программы просто ставятся метки, на которые ссылаются команды перехода; расчет конкретных адресов и смещений в командах переходов машина производит самостоятельно (см. приводимые ниже примеры).


В командах таблицы операций в качестве операндов фигурируют условные обозначения А и В. Настало время поговорить о том, что за ними скрывается. Система команд процессора PDP построена достаточно логично и закономерно, поэтому любой операнд - и первый, и второй - в любой операции задается совершенно одинаково. В PDP существует 8 различных способов задать местонахождение информации, требующейся для выполнения операции [11, 12]. Их принято называть методами адресации и все они связаны с различным использованием РОН. Наличие развитой системы методов адресации делает программирование для процессора PDP очень гибким и мощным.

Несколько наиболее простых и часто применяемых способов указания операндов в команде приводится ниже в виде таблицы.

название мнемоника пояснение
регистроваяRnоперанд в регистре Rn
косвенно-регистровая(Rn) операнд в ячейке ОЗУ, адрес которой в Rn
автоинкрементная(Rn)+ то же, но после чтения Rn увеличивается
автодекрементная-(Rn) то же, но перед чтением Rn уменьшается

В качестве иллюстрации разберем выполнение команды

MOV (R1)+, R0

По этой команде сначала считывается информация из памяти по адресу, находящемуся в R1. После чтения значение R1 автоматически увеличивается, так что при последующем выполнении данной команды будет обрабатываться следующая ячейка. Операция завершается записью считанной из ОЗУ информации в регистр R0.

Из разобранного примера отчетливо видно, что имеющиеся у процессора PDP способы адресации позволяют удобно работать не только с одиночными данными, но и с массивами последовательно хранящейся в памяти информации. Кроме того, некоторые приемы использования счетчика команд R7 в качестве РОН могут давать еще более интересные эффекты. Пусть, например, в некоторой программе встречается команда

MOV (R7)+, R2

и в следующем за ней слове хранится число 6. Учитывая, что после извлечения команды из ОЗУ счетчик R7 немедленно увеличивается, в момент выполнения команды его содержимое уже показывает на слово памяти, где хранится число 6. Следовательно, в качестве операнда (R7) будет считано именно оно и кроме того R7 автоматически "передвинется" на следующую за константой ячейку благодаря автоинкрементному способу адресации. Таким образом, описанный прием позволяет использовать в качестве операнда константу, хранящуюся непосредственно в команде.

И еще об одной важной детали. Автодекрементный и автоинкрементный методы адресации лежат в основе работы стека (советую не пожалеть времени и самостоятельно проверить это утверждение!) Поскольку в командах процессора PDP все РОН равнозначны, то стек можно организовать не только по R6, но и по другим регистрам. Необходимо только помнить, что сам процессор при обращении к подпрограммам и при обработке прерываний всегда использует стек с указателем именно в R6.


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

1. Программа вычисления по формулам:

R1:=R2+R3;
R4:=R3-R2.
MOV R2, R1;сразу складывать нельзя, т.к. сумма заменяет
ADD R3, R1; второй операнд
MOV R3, R4 
SUB R2, R4 
HLT 

2. В R1 и R2 хранятся некоторые числа. Поместить большее из них в R5, а меньшее - в R0.
 CMP R1, R2;сравнить R1 и R2
 BPL L1;переход при R1>=R2
 ;если R2>R1 
 MOV R1, R0 
 MOV R2, R5 
 BR L2 
 ;если R1>=R2 
L1:MOV R1, R5 
 MOV R2, R0 
L2:HLT 

3. Пусть в R1 задан начальный адрес массива ОЗУ, а в R2 - количество ячеек в нем. Вычислить сумму элементов массива.
 CLR R0;очистка суммы
L1:ADD (R1)+, R0;добавить к сумме очередной элемент
 DEC R2;уменьшить на 1 число оставшихся элементов
 BNE L1;цикл, пока не останется 0 элементов
 HLT 

Примечание. В программе используется тот факт, что команда DEC автоматически сравнивает результат с 0 - это делает ненужной специальную команду сравнения CMP.

Л и т е р а т у р а

9. Основы информатики и вычислительной техники: Проб. учеб. пособие для сред. учеб. заведений. Ч.2/ А.П.Ершов, В.М.Монахов, А.А.Кузнецов и др. - М.: Просвещение, 1986. - 143 с.
10. Изучение основ информатики и вычислительной техники: Метод. пособие для учителей и преподавателей сред. учеб. заведений. Ч.2/ А.П.Ершов, В.М.Монахов, М.В.Витиньш и др. - М.: Просвещение, 1986. - 207 с.
11. Зальцман Ю.А. Архитектура и программирование на языке ассемблера БК-0010. Информатика и образование, 1990, N 4-6; 1991, N 1-5.
12. Лин В. PDP-11 и VAX-11. Архитектура ЭВМ и программирование на языке ассемблера. - М.: Радио и связь, 1989. - 320 с.


© Е.А.Еремин, 1997
Из книги:
Еремин Е.А. Как работает современный компьютер. - Пермь: изд-во ПРИПИТ, 1997. 176 с.


Автор сайта - Евгений Александрович Еремин (Пермский государственный педагогический университет). e_eremin@yahoo.com


Free Web Hosting