Некоторые способы указания операндов в командах

 

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

 

В качестве иллюстрации разберем выполнение команды MOV(R1)+,RO

По этой команде сначала считывается информация из памяти по адресу, находящемуся в R1. После чтения значение R1 автоматически увеличивается, так что при последующем выполнении данной команды будет обрабатываться следующая ячейка. Операция завершается записью считанной из ОЗУ информации в регистр 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 автоматически сравнивает результат с нулем, что делает ненужной специальную команду сравнения СМР.