Индексный режим с использованием счетчика команд (6)
b+0) MOV Х(R7)+, R1
b+4) Следующая команда.
Здесь команда содержит два слова. В первом слове записана собственно команда, а во втором – значение величины Х.
Компиляция и выполнения этой команды имеет ряд особенностей:
· В процедуре вычисления адреса операнда величина Х складывается с содержимым счетчика команд. Это – адресация не относительно фиксированной базы, а относительно счетчика команд. Это очень ценная адресация, которая позволяет проектировать "перемещаемые программы", т.е. не привязанные к конкретным адресам памяти.
· В ассемблере для этой адресации предусмотрена упрощенная запись: MOV Х, R1, где Х – относительный адрес.
· Программист не следит за адресами программного кода и в командах всегда указывает абсолютные адреса операндов (согласно их распределения в своей "математической" памяти).
· Номера портов устройств ввода/вывода отображены на пространство адресов памяти, но имеют постоянные адреса в старшей половине памяти и требуют только абсолютную адресацию.
В связи с указанными особенностями, программисты, при написании программы на ассемблере, все адреса пишут в абсолютных значениях. Но, при использовании адресов портов, они заказывают абсолютную адресацию (@#А, режим 3 с R7), а при использовании адресов данных – относительную (А, режим 6 с R7). При этом компилятор оставляет указанный адрес без изменения в первом случае и вычисляет относительный адрес данных, как абсолютный минус продвинутое значение счетчика команд (увеличенного на 4 для первого адреса и на 6 – для второго), во втором случае.
Косвенный индексный режим с использованием счетчика команд (8).
b+0) MOV @Х(R7)+, R1
b+4) Следующая команда.
В командах с косвенным индексным режимом адресации с использованием счетчика команд величина Х задает не адрес операнда, а адрес адреса операнда, относительно "продвинутого" счетчика команд.
В ассемблере для этой адресации предусмотрена упрощенная запись:
MOV @Х, R1, где @Х – относительный адрес адреса оиеранда.
Вопросы для самопроверки:
1. Максимальный размер математической памяти в PDP-11.
2. Максимальный размер физической памяти в PDP-11.
3. Особенности использования РОН.
4. Биты кодов условия регистра состояния процессора.
5. Количество разрядов кодирования полного адреса данных в команде PDP-11.
6. Основные поля в команде PDP-11, задающие адреса операндов.
7. Основные режимы адресации в PDP-11.
8. Режимы адресации с использованием счетчика команд в PDP-11.
9. Способ задания непосредственного операнда в PDP-11.
10. Способ задания абсолютного адреса в PDP-11.
11. Способ задания относительного адреса в PDP-11.
12. Способ задания косвенного относительного адреса в PDP-11.
Выполнение
ВИДЫ АДРЕСАЦИИ СМ ЭВМ
ПРЯМАЯ АДРЕСАЦИЯ
1.1. П.а. ЧЕРЕЗ РЕГИСТР А: RN код адресации :0
Операнд задается непосредственно в регистре, определяемом выражение R.
Пример:
CLR R0 ; очищение регистра 0
1.2. П.а. С АВТОУВЕЛИЧЕНИЕМ А: (RN)+ код адресации :2
Регистр R содержит адрес операнда и после выполнения инструкции (за исключением особых случаев) увеличивается на 2 для операций над словами и на 1 для операций над байтами.
Пример:
CLR (R0)+ ; очищение слова по адресу, содержащемуся в ; регистре 0 и увеличение содержимого регистра 0 ; на 2
.1.3. П.а. С АВТОУМЕНЬШЕНИЕМ А: -(RN) код адресации :4
Перед выполнением операции регистр R, содержащий адрес операнда, уменьшается на 2 для операций над словами и на 1 для операций над байтами.
Пример:
CLR -(R0); содержимое регистра 0 уменьшается на 2, указывая на адреса очищаемых слов
1.4. ИНДЕКСНАЯ А: Е(RN) код адресации :6
Значение выражения Е хранится в памяти, как второе или третье слово инструкции. Действительный адрес вычисляется как сумма величины Е и содержимого регистра R. Величина Е есть смещение, содержимое регистра R – база.
Пример:
CLRB -2(R0) ; действительный адрес очищаемого байта равен – 2 плюс содержимое регистра 0
КОСВЕННАЯ АДРЕСАЦИЯ
2.1. К.а. ЧЕРЕЗ РЕГИСТР А: @RN или (RN) код адресации :1
Регистр R содержит адрес операнда.
Пример:
CLR @R0 ; очищение слово по адресу, находящемуся в регистре 0
2.2. К.а. С АВТОУВЕЛИЧЕНИЕМ А: @(RN)+ код адресации :3
Регистр R содержит указатель (адрес) адреса операнда. После выполнения инструкции содержимое регистра R увеличивается на 2.
Пример:
CLR @(R0)+ ; содержимое регистра 0 указывает на ячейку памяти, содержащую адрес очищаемого слова. После выполнения операции содержимое регистра 0 увеличивается на 2
2.3. К.а. С АВТОУМЕНЬШЕНИЕМ А: @-(RN) код адресации :5
Содержимое регистра R уменьшается на 2 и рассматривается как адрес адреса операнда.
Пример:
CLR @-(R0) ; содержимое регистра 0 уменьшается на 2, указывая на ячейку памяти, содержащую, адрес очищаемого слова.
2.4. КОСВЕННАЯ ИНДЕКСНАЯ А: @Е(RN) код адресации :7
Выражение Е плюс содержимое регистра R дает указатель адреса операнда, как и при индексной. Величина Е есть смещение, содержимое регистра R – база.
Пример:
CLR @114(R0) ; если регистр 0 содержит 100, то указатель получает значение 214, и если ячейка памяти 214 содержит 2000 – ; то очищается содержимое ячейки 2000.
3.АДРЕСАЦИЯ С ИСПОЛЬЗОВАНИЕМ PC (счетчика команд)
3.1. НЕПОСРЕДСТВЕННАЯ А: #Е код адресации :2
Этот режим адресации обеспечивает работу с операндами,заданными непосредственно в инструкции. При непосредственном режиме адресации операнд Е запоминается во втором или третьем слове инструкции. Этот режим реализуется как автоувеличение содержимого регистра 7.
Пример:
MOV #100,R0 ; переслать 100 в регистр 0.
3.2. АБСОЛЮТНАЯ А: @#Е код адресации :3
В этом режиме Е указывает абсолютный адрес, который хранится во втором или третьем слове инструкции. Значение слова, следующего непосредственно за инструкцией, воспринимается как абсолютный адрес операнда.
Пример:
MOV @#100,R0 ; переслать значение содержимого ячейки 100 : в регистр 0.
Абсолютная адресация интерпретируется как косвенное автоувеличение регистра 7.
В приведенном примере инструкция MOV, помещенная в памяти, имеет вид:
ячейка 20: 013700 ;первое слово инструкции
ячейка 22: 000100 ;второе слово инструкции
ячейка 24: следующая инструкция
Инструкция MOV хранится по адресу 20, т.е. РС=20.
После чтения инструкции MOV РС становится равным 22.
Код адресации источника равен 3, номер регистр источника равен 7,т.е. это косвенная адресация с автоувеличением, где роль регистра исполняет счетчик команд (РС). То есть содержимое РС (в нашем примере 22) рассматривается как адрес адреса операнда ,иными словами, ячейка 22 содержит абсолютный адрес операнда.
После выполнения команды РС увеличивается на 2 и указывает на следующую инструкцию.
3.3. ОТНОСИТЕЛЬНАЯ А: Е код адресации :6
Этот вид адресации интерпретируется как индексный режим с использованием регистра 7(РС) в качестве индексного регистра. Смещение для вычисления адреса хранится во втором или третьем слове инструкции и задается как число, которое прибавляется к содержимому РС и дает адрес операнда.
Таким образом, смещение есть (Е - РС), где Е- адрес операнда.
Пример:
Инструкция MOV 100,R3, размещенная в памяти по абсолютному адресу 20 имеет вид:
ячейка 20: 016703 ;первое слово инструкции
ячейка 22: 000054 ;второе слово инструкции
ячейка 24: следующая инструкция
Инструкция MOV хранится по адресу 20, т.е. РС=20.
После чтения инструкции MOV РС становится равным 22.
Код адресации источника равен 6, номер регистр источника равен 7,т.е. это адресация с индексацией, где роль регистра исполняет счетчик команд (РС).
Значение смещения процессор считывает по адресу, указанному в РС (в нашем примере содержимое РС = 22), после чего значение РС становится равным 24.
Для вычисления адреса операнда-источника значение смещения прибавляется к содержимому указанного регистра, т.е: адрес операнда вычисляется как смещение + РС = 54+24=100
Пример:
CLR 100 ; очистить ячейку 100
3.4. ОТНОСИТЕЛЬНО-КОСВЕННАЯ А: @Е код адресации :7
Этот вид адресации подобен относительной адресации, за исключением того, что выражение Е используется в качестве указателя адреса операнда. То есть, операнд, следующий за инструкцией, прибавляется к содержимому РС. Эта сумма дает указатель адреса операнда.
Пример:
MOV @100,R0 ; переслать в регистр 0 содержимое ячейки, адрес которой находится в ячейке 100