Название | Мнемоника | Пояснение |
Регистровая Косвенно-регистровая Автоинрементная Автодекрементная | 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 автоматически сравнивает результат с нулем, что делает ненужной специальную команду сравнения СМР.