Архитектура PDP-11 - PDP-11 architecture
В Архитектура PDP-11[1] является архитектура набора команд (ISA) разработано Корпорация цифрового оборудования (DEC). Реализуется центральные процессоры (ЦП) и микропроцессоры используется в PDP-11 миникомпьютеры. Он широко использовался в 1970-х годах, но в конечном итоге был вытеснен более мощными VAX-11 архитектура 1980-х гг.
объем памяти
Форматы данных
Хранятся шестнадцатибитные слова прямой порядок байтов (с наименее значимым байты первый). Тридцатидвухразрядные данные - поддерживаются как расширения базовой архитектуры, например, плавающая точка в Набор инструкций FPU, двойные слова в Расширенный набор инструкций или длинные данные в Набор коммерческих инструкций- хранятся в более чем одном формате, включая необычный средний порядок байтов формат[2][3] иногда называется "PDP-endian".
Управление памятью
16-битные адреса PDP-11 могут адресовать 64КБ. К тому времени, когда PDP-11 уступил место VAX, 8-битные байты и шестнадцатеричное представление стали стандартом в отрасли; однако числовые значения на PDP-11 всегда используют восьмеричную нотацию, а объем памяти, подключенной к PDP-11, всегда указывается в виде количества слов. Базовый логический адрес пространство составляет 32К слов, но высокие 4К физического адресного пространства (адреса 1600008 через 1777778 при отсутствии управления памятью) не заполняются, потому что регистры ввода / вывода на шине отвечают на адреса в этом диапазоне. Итак, изначально полностью загруженный PDP-11 содержал 28К слов.
Процессор резервирует младшие адреса памяти для векторов из двух слов, которые дают счетчик программ и слово состояния процессора, с которого можно начать процедуру обслуживания. Когда устройство ввода-вывода прерывает программу, оно помещает адрес своего вектора на шину, чтобы указать, какая служебная процедура должна взять на себя управление. Самые низкие векторы - это служебные программы для обработки различных типов ловушек. Ловушки возникают при некоторых программных ошибках, таких как попытка выполнить неопределенную инструкцию; а также когда программа выполняет такую инструкцию, как BPT, EMT, IOT или TRAP, чтобы запросить обслуживание у операционной системы.
Расширение памяти
Статья PDP-11 описывает, как 16-битное логическое адресное пространство стало непреодолимым ограничением. Во время существования PDP-11 для обхода ограничения использовались следующие методы:
- Процессоры PDP-11 более поздней модели включали управление памятью для поддержки виртуальная адресация. Физическое адресное пространство было расширено до 18 или 22 бит, что позволило использовать до 256 КБ или 4 МБ ОЗУ. Логическое адресное пространство (то есть адресное пространство, доступное в любой момент без изменения таблицы отображения памяти) оставалось ограниченным до 16 бит.
- Некоторые модели, начиная с PDP-11/45, могут быть настроены на использование 32К слов (64 КБ) в качестве «пространства команд» для программного кода и отдельных 32К слов «пространства данных». Некоторые операционные системы - особенно Unix, начиная с версии V7, и RSX11-M + - полагаются на эту функцию.
- Методы программирования, такие как наложение блок сохраненных инструкций или данных вместе с другим по мере необходимости может скрыть проблемы подкачки от прикладного программиста. Например, Модула-2 компилятор создает код, в соответствии с которым система времени выполнения подкачивает страницы размером 8 Кбайт в память, когда отдельные процедуры получают управление. (См. Внешнюю ссылку Вот.)
Регистры процессора
Регистры DEC PDP-11 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ЦП содержит восемь 16-битных универсальных регистры (От R0 до R7). Регистр R7 - это счетчик команд (ПК). Хотя любой регистр может использоваться в качестве указателя стека, R6 является указателем стека (SP), используемым для аппаратных прерываний и ловушек. R5 часто используется для указания на текущий кадр вызова процедуры. Для ускорения переключения контекста некоторые модели PDP-11 предоставляют двойные наборы регистров R1-R5. В режимах «Ядро», «Супервизор» (если присутствует) и «Пользователь» есть отдельные карты памяти, а также отдельные указатели стека (так что пользовательская программа не может вызвать сбой в работе системы, сохранив недопустимое значение в регистре указателя стека).
Режимы адресации
Большинство инструкций выделяют шесть битов для определения операнда. Три бита выбирают один из восьми режимов адресации, а три бита выбирают общий регистр.
Кодирование режима адресации шестибитных операндов выглядит следующим образом:
5 | 3 | 2 | 0 | ||
Режим | регистр |
В следующих разделах каждый элемент содержит пример написания операнда на языке ассемблера. Rn означает один из восьми регистров, записанных с R0 по R7.
Общие режимы адресации регистров
Следующие восемь режимов могут применяться к любому общему регистру. Их эффекты при применении к R6 (указатель стека, SP) и R7 (счетчик программ, PC) изложены отдельно в следующих разделах.
Код | имя | пример | Описание |
---|---|---|---|
0n | регистр | Rn | Операнд находится в Rn |
1n | Регистрация отложена | (Rn) | Rn содержит адрес операнда |
2n | Автоматическое приращение | (Rn) + | Rn содержит адрес операнда, затем увеличивает Rn |
3n | Автоинкремент отложен | @ (Rn) + | Rn содержит адрес адреса операнда, затем увеличивает Rn на 2 |
4n | Автодекремент | - (Rn) | Уменьшите Rn, затем используйте результат как адрес операнда |
5н | Отложенный автодекремент | @ - (Rn) | Уменьшите Rn на 2, затем используйте результат как адрес адреса операнда. |
6n | Показатель | X (Rn) | Rn + X - адрес операнда |
7n | Индекс отложен | @X (Rn) | Rn + X - адрес адреса операнда |
В режимах с отложенным индексом и индексированием X - это 16-битное значение, взятое из второго слова инструкции. В командах с двойным операндом оба операнда могут использовать эти режимы. Такие инструкции состоят из трех слов.
Операции автоинкремента и автодекремента в регистре выполняются на 1 в байтовых инструкциях, на 2 в словарных инструкциях и на 2 всякий раз, когда используется отложенный режим, поскольку количество адресов регистра является (словесным) указателем.
Программный счетчик режимов адресации
Когда указан R7 (программный счетчик), четыре режима адресации, естественно, дают полезные эффекты:
Код | имя | пример | Описание |
---|---|---|---|
27 | Немедленно | #n | Операнд - это следующее слово инструкции |
37 | Абсолютное | @ # а | Адрес операнда - это следующее слово инструкции |
67 | Родственник | а | Адрес операнда - это следующее слово инструкции, добавляемой в ПК. |
77 | Относительно отложенный | @a | Адрес адреса операнда - это следующее слово инструкции, добавляемой в ПК. |
Единственное распространенное использование абсолютного режима, синтаксис которого сочетает в себе немедленный и отложенный режимы, - это указание регистров ввода / вывода, поскольку регистры для каждого устройства имеют определенные адреса памяти. Относительный режим имеет более простой синтаксис и более типичен для обращения к программным переменным и пунктам назначения перехода. Программа, которая использует относительный режим (и относительный отложенный режим) исключительно для внутренних ссылок, является независимый от позиции; он не содержит предположений о своем собственном местоположении, поэтому его можно загрузить в произвольную ячейку памяти или даже переместить без необходимости корректировки его адресов для отражения его местоположения (переехал ). При вычислении таких адресов относительно текущего местоположения процессор выполнял перемещение на лету.
Немедленный и абсолютный режимы - это просто режим отложенного автоинкремента и автоинкремента, соответственно, применяемые к ПК. Когда вспомогательное слово находится «в инструкции», как сказано в приведенной выше таблице, ПК для следующей инструкции автоматически увеличивается после вспомогательного слова. Поскольку ПК всегда указывает на слова, операция автоинкремента всегда на 2.
Режимы адресации стека
R6, также обозначаемый как SP, используется как аппаратный стек для ловушек и прерываний. Соглашение, обеспечиваемое набором режимов, предоставляемых PDP-11, заключается в том, что стек растет вниз - к более низким адресам - по мере того, как в него помещаются элементы. Когда режим применяется к SP или к любому регистру, который программист выбирает для использования в качестве программного стека, режимы адресации имеют следующие эффекты:
Код | имя | пример | Описание |
---|---|---|---|
16 | Отложено | (SP) | Операнд находится наверху стека |
26 | Автоматическое приращение | (SP) + | Операнд находится наверху стека, затем вытащите его |
36 | Автоинкремент отложен | @ (SP) + | Указатель на операнд находится сверху стека; убрать указатель |
46 | Автодекремент | - (СП) | Помещаем значение в стек |
66 | Проиндексировано | X (SP) | Это относится к любому элементу в стеке по положительному расстоянию от вершины. |
76 | Индексированный отложенный | @X (SP) | Это относится к значению, на которое указатель находится в указанном месте в стеке. |
Хотя программные стеки могут содержать байты, SP всегда является стеком слов. Операции автоинкремента и автодекремента для SP всегда на 2.
Набор инструкций
PDP-11 работает с байтами и словами. Байты определяются номером регистра, определяющим младший байт регистра, или ячейкой памяти. Слова определяются номером регистра или ячейкой памяти младшего байта, который должен быть четным числом. В большинстве инструкций, которые принимают операнды, бит 15 установлен для указания байтовой адресации или снят для указания адресации слов. В списках в следующих двух разделах программист на ассемблере добавил B к символу инструкции, чтобы указать операцию с байтом; например, MOV превратился в MOVB.
Некоторые инструкции, например MARK и SOB, не были реализованы на некоторых моделях PDP-11.
Инструкции с двойным операндом
Четыре старших бита определяют операцию, которая должна быть выполнена (бит 15 обычно выбирает адрес слова, а не байта). Две группы по шесть битов определяют режим адресации операнда источника и режим адресации операнда назначения, как определено выше.
15 | 12 | 11 | 9 | 8 | 6 | 5 | 3 | 2 | 0 | ||||||
Код операции | Src | регистр | Dest | регистр |
Код операции | Мнемонический | Операция |
---|---|---|
01 | MOV | Шаг: Dest ← Src Примечание: при перемещении байта в регистр знак расширяется до битов 8-15. |
11 | MOVB | |
02 | CMP | Сравните: Установить флаги (Src - Dest) |
12 | CMPB | |
03 | НЕМНОГО | Битовый тест: Установить флаги (Src ∧ Dest) |
13 | BITB | |
04 | BIC | Немного ясно: Dest ← Dest ∧ Единственное дополнение (Src) |
14 | BICB | |
05 | БИС | Набор бит: Dest ← Dest ∨ Src |
15 | BISB | |
06 | ДОБАВИТЬ | Добавить: Dest ← Dest + Src |
16 | SUB | Вычесть: Dest ← Dest - Источник |
Команды ADD и SUB используют адресацию слов и не имеют побайтно-ориентированных вариаций.
Некоторые инструкции с двумя операндами используют операнд режима адресации и дополнительный регистровый операнд:
15 | 9 | 8 | 6 | 5 | 3 | 2 | 0 | ||||||||
Код операции | Рег | Src / Dest | регистр |
Если используется пара регистров (записанная ниже как «(Reg, Reg + 1)», первый регистр содержит младшую часть операнда и должен быть регистром с четным номером. Следующий регистр с более высоким номером содержит старшую часть часть операнда (или остаток). Исключением является инструкция умножения; Reg может быть нечетным, но если это так, старшие 16 бит результата не сохраняются.
Код операции | Мнемонический | Операция |
---|---|---|
070 | MUL | Умножить: (Reg, Reg + 1) ← Reg × Src |
071 | DIV | Делить: Вычислить (Reg, Reg + 1) ÷ Src; Reg ← частное; Reg + 1 ← остаток |
072 | ЯСЕНЬ | Арифметический сдвиг: если Src <5: 0> <0, то Reg ← Shift-вправо (Reg, -Src <5: 0>) иначе Reg ← Shift-влево (Reg, Src <5: 0>) |
073 | ASHC | Комбинированный арифметический сдвиг: если Src <5: 0> <0, то (Reg, Reg + 1) ← Shift-вправо ((Reg, Reg + 1), -Src <5: 0>)
|
074 | XOR | Эксклюзивный или: Dest ← Dest ⊻ Reg |
Инструкции с одним операндом
Десять битов старшего разряда определяют выполняемую операцию, а бит 15 обычно выбирает байтовую адресацию, а не словесную. Одна группа из шести битов определяет операнд, как определено выше.
15 | 6 | 5 | 3 | 2 | 0 | ||||||||||
Код операции | Src / Dest | регистр |
Код операции | Мнемонический | Операция |
---|---|---|
0001 | JMP | Прыгать: ПК ← Src |
0003 | ТАМПОН | Поменять местами байты слова: Dest ← Swap-байты (Dest) |
0050 | CLR | Ясно: Dest ← 0 |
1050 | CLRB | |
0051 | COM | Дополнение: Dest ← Единицы-дополнение (Dest) |
1051 | Расческа | |
0052 | INC | Приращение: Dest ← Dest + 1 |
1052 | INCB | |
0053 | DEC | Уменьшение: Dest ← Dest - 1 |
1053 | DECB | |
0054 | NEG | Отрицать: Dest ← Дополнение до двух (Dest) |
1054 | NEGB | |
0055 | АЦП | Добавить перенос: Dest ← Dest + C флаг |
1055 | ADCB | |
0056 | SBC | Вычесть перенос: Dest ← Dest - флаг C |
1056 | SBCB | |
0057 | TST | Тестовое задание: Установить флаги (Src) |
1057 | TSTB | |
0060 | ROR | Повернуть вправо: Dest ← Повернуть вправо (Dest, 1) |
1060 | RORB | |
0061 | ROL | Повернуть налево: Dest ← Повернуть влево (Dest, 1) |
1061 | ROLB | |
0062 | ASR | Арифметический сдвиг вправо: Dest ← Shift-вправо (Dest, 1) |
1062 | ASRB | |
0063 | ASL | Арифметический сдвиг влево: Dest ← Shift-влево (Dest, 1) |
1063 | ASLB | |
1064 | MTPS | Перейти в PSW: PSW ← Src |
0065 | MFPI | Перейти из предыдущего I пробела: - (SP) ← Src |
1065 | MFPD | Перейти из предыдущего пробела D: - (SP) ← Src |
0066 | MTPI | Перейти к предыдущей позиции I: Dest ← (SP) + |
1066 | MTPD | Перейти к предыдущей позиции D: Dest ← (SP) + |
0067 | SXT | Знак продлить: если N flag ≠ 0, то Dest ← -1 иначе Dest ← 0 |
1067 | MFPS | Перейти из PSW: Dest ← PSW |
Инструкции по отделению
В большинстве инструкций перехода выбор перехода зависит от состояния кодов условий. Команде ветвления обычно предшествует инструкция с двумя операндами CMP (сравнение), BIT (битовая проверка) или инструкция TST с одним операндом (проверка). Арифметические и логические инструкции также устанавливают коды условий. В отличие от Intel процессоры в архитектура x86, Инструкции MOV также устанавливают их, поэтому для перехода можно использовать инструкцию перехода в зависимости от того, было ли перемещенное значение нулевым или отрицательным.
Старший байт инструкции определяет операцию. Биты с 9 по 15 - это код операции, а бит 8 - это значение вычисления кода условия, в результате которого выполняется переход. Младший байт - это смещение слова со знаком относительно текущего местоположения программного счетчика. Это позволяет выполнять прямые и обратные переходы в коде.
15 | 9 | 8 | 7 | 0 | |||||||||||
Код операции | C | Смещение |
Код операции | C | Мнемонический | Состояние или работа |
---|---|---|---|
000 | 1 | BR | Филиал всегда ПК ← ПК + 2 × Расширение знака (смещение) |
001 | 0 | BNE | Ветвь, если не равно Z = 0 |
001 | 1 | БЫТЬ Q | Ветвь, если равно Z = 1 |
002 | 0 | BGE | Переходить, если больше или равно (N ⊻ V) = 0 |
002 | 1 | BLT | Ветвь, если меньше (N ⊻ V) = 1 |
003 | 0 | BGT | Перейти, если больше, чем (Z ∨ (N ⊻ V)) = 0 |
003 | 1 | BLE | Переходить, если меньше или равно (Z ∨ (N ⊻ V)) = 1 |
100 | 0 | BPL | Ветвь, если плюс N = 0 |
100 | 1 | ИМТ | Ветвь, если минус N = 1 |
101 | 0 | BHI | Ветвь, если выше (C ∨ Z) = 0 |
101 | 1 | BLOS | Ветвь, если ниже или такая же (C ∨ Z) = 1 |
102 | 0 | BVC | Переход при сбросе переполнения V = 0 |
102 | 1 | BVS | Переход, если установлено переполнение V = 1 |
103 | 0 | BCC или BHIS | Ветвь, если несёт ясно, или Ветвь, если выше C = 0 |
103 | 1 | BCS или BLO | Переход, если установлен перенос, или Переход, если ниже С = 1 |
Ограниченный диапазон инструкций ветвления означал, что по мере роста кода целевые адреса некоторых ветвей становились недоступными. Программист заменил бы BR из одного слова на инструкцию JMP из двух слов из следующей группы. Поскольку JMP не имеет условных форм, программист должен изменить BEQ на BNE, который разветвляется вокруг JMP.
SOB (вычитание единицы и переход) - еще одна инструкция условного перехода. Указанный регистр уменьшается на 1, и если результат не равен нулю, выполняется обратная ветвь на основе 6-битного смещения слова.
15 | 9 | 8 | 6 | 5 | 0 | ||||||||||
Код операции | Рег | Смещение |
Код операции | Мнемонический | Операция |
---|---|---|
077 | Сука | Вычесть единицу и перейти: Reg ← Reg - 1; если Reg ≠ 0, то PC ← PC - 2 × Смещение |
Подпрограммные инструкции
Инструкция JSR может сохранить любой регистр в стеке. Программы, которым эта функция не нужна, указали ПК в качестве регистра (ПК JSR, адрес) и процедуру, возвращенную с помощью ПК RTS. Если подпрограмма была вызвана, например, с «JSR R4, адресом», то старое значение R4 будет на вершине стека, а адрес возврата (сразу после JSR) будет в R4. Это позволило подпрограмме получить доступ к значениям, закодированным в строке, указав (R4) +, или к встроенным указателям, указав @ (R4) +. Автоинкремент прошел мимо этих данных до точки, в которой код вызывающего абонента возобновился. Такая подпрограмма должна будет указать RTS R4 для возврата к вызывающему.
15 | 9 | 8 | 6 | 5 | 3 | 2 | 0 | ||||||||
Код операции | Рег | Src | регистр |
Код операции | Мнемонический | Операция |
---|---|---|
004 | JSR | Перейти к подпрограмме: - (SP) ← Рег; Рег ← ПК; ПК ← Src |
15 | 3 | 2 | 0 | ||||||||||||
Код операции | Рег |
Код операции | Мнемонический | Операция |
---|---|---|
00020 | РТС | Возврат из подпрограммы: ПК ← Рег; Рег ← (SP) + |
Инструкции по ловушке
15 | 9 | 8 | 7 | 0 | |||||||||||
Код операции | S | Код операции |
Код операции | S | Мнемонический | Операция |
---|---|---|---|
104 | 0 | ЕМТ | Ловушка эмулятора: - (SP) ← PS; - (СП) ← ПК; ПК ← (30); PS ← (32) |
104 | 1 | ЛОВУШКА | Общая ловушка: - (SP) ← PS; - (СП) ← ПК; ПК ← (34); PS ← (36) |
15 | 0 | ||||||||||||||
Код операции |
Код операции | Мнемонический | Операция |
---|---|---|
000002 | RTI | Возврат из прерывания: ПК ← (SP) +; PS ← (SP) + |
000003 | BPT | Ловушка точки останова: - (SP) ← PS; - (СП) ← ПК; ПК ← (14); PS ← (16) |
000004 | IOT | Ловушка ввода / вывода: - (SP) ← PS; - (СП) ← ПК; ПК ← (20); PS ← (22) |
000006 | RTT | Возвращение из ловушки: ПК ← (SP) +; PS ← (SP) + |
Назначение адресов векторов ловушек и исключений
Вектор | Состояние |
---|---|
000000 | (Зарезервированный) |
000004 | Недопустимая инструкция, ошибка шины, ограничение стека |
000010 | Зарезервированная инструкция |
000014 | Инструкция BPT, трассировка ловушки |
000020 | Инструкция IOT |
000030 | Инструкция ЕМТ |
000034 | Инструкция TRAP |
000244 | Исключение с плавающей точкой |
000250 | Ошибка управления памятью |
Разные инструкции
15 | 0 | ||||||||||||||
Код операции |
Код операции | Мнемонический | Операция |
---|---|---|
000000 | HALT | Остановить процессор: Остановить выполнение перед следующей инструкцией |
000001 | ПОДОЖДИТЕ | Дождитесь прерывания: Остановить выполнение перед следующей инструкцией; Возобновить выполнение при следующем обработчике прерывания |
000005 | СБРОС НАСТРОЕК | Сбросить UNIBUS: Подтвердите INIT на UNIBUS на 10 мс; Все остальные устройства возвращаются в состояние включения |
Операции кода условия
15 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||||||
Код операции | 1 | S | N | Z | V | C |
Код операции | S | Мнемонический | Операция |
---|---|---|---|
0002 | 0 | Ccc | Очистить коды состояния: Очистить коды в соответствии с битами N, Z, V, C |
0002 | 1 | Scc | Установить коды состояния: Установить коды в соответствии с битами N, Z, V, C |
Четыре кода состояния в слове состояния процессора (PSW):
- N означает отрицательное значение
- Z обозначает нулевое (равное) состояние
- V указывает на состояние переполнения, и
- C указывает на состояние переноса.
Инструкции в этой группе представляли собой то, что компания Digital называла «микропрограммированными»: один бит в командном слове ссылался на единственный код состояния. Ассемблер не определил синтаксис для определения каждой комбинации, но символы SCC и CCC составляют инструкцию, которая устанавливает или очищает, соответственно, все четыре кода условий.
Очистка или установка ни одного из кодов условий (коды операций 000240 и 000260 соответственно) могут эффективно рассматриваться как инструкции без операции. Фактически, мнемоника NOP собрана в 000240.
Дополнительные наборы инструкций
- Расширенный набор команд (EIS)
EIS был опцией для 11/35/40 и 11/03 и был стандартным для новых процессоров.
- MUL, DIV умножить и разделить целочисленный операнд для регистрации пары
- ASH, ASHC арифметика - сдвиг регистра или пары регистров. Для положительного числа он будет сдвигаться влево, а для отрицательного - вправо.
- Плавающий набор команд (FIS)
Набор инструкций FIS был опцией для PDP-11/35/40 и 11/03.
- FADD, FSUB, FMUL, FDIV только для операций с одинарной точностью в стеке, адресуемом операндом регистра
- Процессор с плавающей запятой (FPP)
Это был дополнительный вариант процессора с плавающей запятой для 11/45 и большинства последующих моделей.
- полные операции с плавающей запятой для операндов с одинарной или двойной точностью, выбираемые одинарным / двойным битом в регистре состояния с плавающей запятой
- предшественник формата данных с плавающей запятой одинарной точности IEEE 754 формат: знаковый бит, 8-битная экспонента, 23-битная мантисса со скрытым битом 24
- Набор коммерческих инструкций (СНГ)
CIS был реализован дополнительным микрокодом в 11/23/24 и с помощью дополнительного модуля в 11/44 и в одной версии 11/74. Он предоставил строковые и десятичные инструкции, используемые КОБОЛ и Дибол.
- Доступ к слову состояния процессора (PSW)
PSW был сопоставлен с адресом памяти 177 776, но инструкции, найденные на всех, кроме самых ранних PDP-11, давали программам более прямой доступ к регистру.
- SPL (установить уровень приоритета)
- MTPS (перейти в состояние процессора)
- MFPS (переход от состояния процессора)
- Доступ к другим областям памяти
На PDP-11, которые предоставляли несколько пространств для инструкций и пространств данных, набор неортогональных инструкций Move давал доступ к другим пространствам. Например, подпрограммы в операционной системе, которые обрабатывают вызовы службы времени выполнения, будут использовать эти инструкции для обмена информацией с вызывающим.
- MTPD (перейти к предыдущей области данных)
- MTPI (перейти к предыдущей инструкции)
- MFPD (переход из предыдущего пространства данных)
- MFPI (перейти из предыдущей области инструкций)
Несогласованные инструкции
За время жизни PDP-11 возникли тонкие различия в реализации инструкций и комбинаций режимов адресации, хотя ни одна реализация не считалась правильной. Несоответствия не повлияли на обычное использование PDP-11.
Скорость
Скорость процессора PDP-11 зависит от модели, конфигурации памяти, операционного кода и режимов адресации. Синхронизация инструкций имела до трех компонентов: выполнение / выборка самой инструкции и время доступа для источника и пункта назначения. Последние два компонента зависели от режима адресации. Например, на PDP-11/70 (около 1975 г.) инструкция вида ADDИкс(Рм),y(Рп) имело время выборки / выполнения 1,35 микросекунды плюс время источника и назначения по 0,6 микросекунды каждое, при общем времени выполнения инструкции 2,55 микросекунды. Любой случай, когда адресуемая память не была в кэше, добавляла 1,02 микросекунды. Регистр в регистр ADD Rм,Рп может выполняться из кеша за 0,3 микросекунды. С плавающей запятой было еще сложнее, поскольку между ЦП и процессором с плавающей запятой было некоторое перекрытие, но в целом с плавающей запятой было значительно медленнее. Команда сложения с плавающей запятой одинарной точности может составлять от 2,4 до 5,5 микросекунд плюс время на выборку операндов.[4]
Прерывания
PDP-11 работал с уровнем приоритета от 0 до 7, объявленным тремя битами в Слово состояния процессора (PSW), а высокопроизводительные модели могут работать в различных режимах: ядро (привилегированный), пользовательский (приложение) и иногда супервизор в соответствии с двумя битами в PSW.
Чтобы запросить прерывание, устройство шины будет использовать одну из четырех линий общей шины с BR4 по BR7, пока процессор не ответит. Более высокие числа указывают на большую срочность, возможно, что данные могут быть потеряны или нужный сектор может выйти из контакта с головками чтения / записи, если процессор не отреагирует быстро. Готовность принтера к другому символу была самым низким приоритетом (BR4), так как он будет оставаться готовым бесконечно. Если бы процессор работал на уровне 5, то BR6 и BR7 были бы в порядке. Если бы процессор работал на 3 или ниже, он выдал бы любое прерывание; если на 7, он не предоставит ни одного. Запросы на автобус, которые не были удовлетворены, не терялись, а просто откладывались. Устройство, нуждающееся в обслуживании, продолжит подтверждать свой запрос шины.
Каждый раз, когда прерывание превышало уровень приоритета процессора, процессор выдавал соответствующее разрешение шины, от BG4 до BG7. Автобусные линии не были обычными маршрутами, но были гирлянда: Вход каждого элемента был выходом предыдущего элемента в цепочке. Шлюз был на каждом устройстве шины, а устройство, физически ближе к процессору, было раньше в гирляндной цепи. Если устройство сделало запрос, то, обнаружив вход разрешения шины, оно могло бы сделать вывод, что оно контролирует шину и не передало сигнал разрешения следующему устройству на шине. Если устройство не отправляло запрос, оно распространяло входные данные разрешения шины на выход разрешения шины, давая возможность ответить следующему ближайшему устройству. (Если устройства не занимали слоты, смежные с процессорной платой, «карты предоставления целостности», вставленные в пустые слоты, распространяли линию разрешения шины.)
Получив управление шиной, устройство сбросило запрос шины и поместило на шину адрес памяти своего вектора из двух слов. Процессор сохранил счетчик программ (ПК) и PSW, вошли в режим ядра и загрузили новые значения из указанного вектора. Для устройства в BR6 новый PSW в своем векторе обычно будет указывать 6 в качестве нового приоритета процессора, поэтому процессор будет учитывать более срочные запросы (BR7) во время процедуры обслуживания, но откладывать запросы с таким же или более низким приоритетом. В новом ПК процессор перешел к процедуре обслуживания устройства прерывания. Эта процедура управляла устройством, по крайней мере, устраняя условие, вызвавшее прерывание. Процедура завершилась инструкцией RTI (ReTurn from Interrupt), которая восстановила PC и PSW непосредственно перед тем, как процессор предоставил прерывание.
Если запрос шины был сделан по ошибке, и ни одно устройство не ответило на предоставление шины, процессор прервал тайм-аут и выполнил ловушку, которая указала бы на неисправное оборудование.
МАКРО-11 язык ассемблера
МАКРО-11 это язык ассемблера для PDP-11. Это преемник PAL-11 (Program Assembler Loader), более ранняя версия языка ассемблера PDP-11 без макросов. MACRO-11 поддерживался во всех операционных системах DEC PDP-11. PDP-11 Unix системы также включают ассемблер (называемый "так как "), структурно похожий на MACRO-11, но с другим синтаксисом и меньшим количеством функций.
Миф о влиянии PDP-11 на языки программирования
Народный миф гласит, что архитектура набора команд PDP-11 повлияла на идиоматическое использование Язык программирования B. Режимы увеличения и уменьшения адресации PDP-11 соответствуют −−i
и я ++
конструкции в C. Если я
и j
обе регистровые переменные, такое выражение, как * (−− я) = * (j ++)
может быть скомпилирован в единую машинную инструкцию. Деннис Ричи говорит, что этот народный миф исторически невозможен.[5] Однако Язык программирования C действительно воспользовались преимуществами некоторых функций низкоуровневого программирования PDP-11, что привело к их включению в новые процессоры.[6]
Заметки
- ^ "Руководство по процессору PDP-11" (PDF). DEC. Получено 13 ноября 2015.
- ^ pdp11 / 05/10/35/40, Глава 7.
- ^ pdp11 / 04 / 34a / 44/60/70, стр. 421.
- ^ Руководство по процессору DEC PDP-11/70, 1975, Приложение C, Сроки выполнения команд
- ^ Деннис М. Ричи (Март 1993 г.). «Развитие языка Си». Уведомления ACM SIGPLAN. 28 (3): 201–208. Дои:10.1145/155360.155580.
Люди часто предполагают, что они были созданы для использования режимов адресации с автоинкрементом и автоматическим декрементом, предоставляемых DEC PDP-11, на которых C и Unix впервые стали популярными. Это исторически невозможно, поскольку на момент разработки B не было PDP-11. PDP-7, однако, имел несколько ячеек памяти с «автоматическим увеличением», со свойством, что косвенная ссылка на память через них увеличивала ячейку. Эта функция, вероятно, подсказала Томпсону такие операторы; Обобщение, сделавшее их одновременно префиксом и постфиксом, было его собственным. Действительно, ячейки с автоинкрементом не использовались непосредственно в реализации операторов, и более сильной мотивацией для нововведения, вероятно, было его наблюдение, что перевод ++ x был меньше, чем перевод x = x + 1.
- ^ Бакё, Джон. «DEC PDP-11, тест для первого поколения 16/32 бит. (1970)» в Великие микропроцессоры прошлого и настоящего (V 13.4.0), Раздел третий, часть I. Доступ 2011-03-04.
использованная литература
- Руководство по процессору pdp11 - pdp11 / 05/10/35/40. Корпорация цифрового оборудования. 1973 г.
- Руководство по процессору pdp11 - pdp11 / 04 / 34a / 44/60/70. Корпорация цифрового оборудования. 1979 г.
дальнейшее чтение
- Экхаус-младший, Ричард Х .; Моррис, Л. Роберт (1979). Организация, программирование и приложения микрокомпьютерных систем (PDP-11). Энглвуд Клиффс, Нью-Джерси: Prentice-Hall. ISBN 0-13-583914-9.
- Майкл Сингер, PDP-11. Программирование на языке ассемблера и организация машин, John Wiley & Sons, Нью-Йорк: 1980.
внешние ссылки
- Руководство по процессору PDP-11 (Гордон Белл Издание 1969 г., Издание 1979 года в Bitsavers )
- Сохранение 16-разрядных миникомпьютеров серии PDP-11
- Гордон Белл и статья Билла Стрекера 1975 года, Что мы узнали из PDP-11
- Эрзац-11, эмулятор PDP-11
- Дополнительные документы и ссылки на Сайт Гордона Белла.
- Пушистый шар
- На LSI-11, RT-11, мегабайтах памяти и Modula-2 / VRS Гюнтер Доцель, ModulaWare.com - Статья о синергии компилятора и компоновщика Modula-2 для преодоления ограничений адресного пространства PDP / LSI-11, опубликованная в DEC PROFESSIONAL, The Magazine for DEC Users, Professional Press, Spring House, PA. США, январь 1986 г.