Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Архитектура PDP-11 [1] - это архитектура набора команд CISC (ISA), разработанная Digital Equipment Corporation (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 КБ физического адресного пространства (адреса с 160000 8 по 177777 8 при отсутствии управления памятью) не заполняются, потому что регистры ввода / вывода на шине отвечают на адреса в этом диапазоне. Итак, изначально полностью загруженный 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 + - полагаются на эту функцию.
  • Методы программирования, такие как наложение блока сохраненных инструкций или данных на другой по мере необходимости, могут скрыть проблемы пейджинга от прикладного программиста. Например, компилятор Modula-2 создает код, в соответствии с которым система времени выполнения подкачивает страницы размером 8 Кбайт в память, когда отдельные процедуры получают управление. (См. Внешнюю ссылку здесь .)

Регистры ЦП [ править ]

ЦП содержит восемь 16-разрядных регистров общего назначения (от R0 до R7). Регистр R7 - это счетчик программ (ПК). Хотя любой регистр может использоваться в качестве указателя стека, R6 является указателем стека (SP), используемым для аппаратных прерываний и ловушек. R5 часто используется для указания на текущий кадр вызова процедуры. Для ускорения переключения контекста в некоторых моделях PDP-11 предусмотрены двойные наборы регистров R1-R5. В режимах «Ядро», «Супервизор» (если присутствует) и «Пользователь» есть отдельные карты памяти, а также отдельные указатели стека (так что пользовательская программа не может вызвать сбой в работе системы, сохранив недопустимое значение в регистре указателя стека).

Режимы адресации [ править ]

Большинство инструкций выделяют шесть битов для определения операнда. Три бита выбирают один из восьми режимов адресации, а три бита выбирают общий регистр.

Кодирование режима адресации шестибитных операндов выглядит следующим образом:


В следующих разделах каждый элемент включает пример написания операнда на языке ассемблера. Rn означает один из восьми регистров, записанных с R0 по R7.

Общие режимы адресации регистров [ править ]

Следующие восемь режимов могут быть применены к любому общему регистру. Их эффекты при применении к R6 (указатель стека, SP) и R7 (счетчик программ, PC) изложены отдельно в следующих разделах.

В режимах с отложенным индексом и индексированием X - это 16-битное значение, взятое из второго слова инструкции. В командах с двойным операндом оба операнда могут использовать эти режимы. Такие инструкции состоят из трех слов.

Операции автоинкремента и автодекремента в регистре выполняются на 1 в байтовых инструкциях, на 2 в словарных инструкциях и на 2 всякий раз, когда используется отложенный режим, поскольку количество адресов регистра является (словесным) указателем.

Режимы адресации счетчика программ [ править ]

Когда указан R7 (программный счетчик), четыре режима адресации, естественно, дают полезные эффекты:

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

Немедленный и абсолютный режимы - это просто режим отложенного автоинкремента и автоинкремента, соответственно, применяемые к ПК. Когда вспомогательное слово находится «в инструкции», как сказано в приведенной выше таблице, ПК для следующей инструкции автоматически получает приращение после вспомогательного слова. Поскольку ПК всегда указывает на слова, операция автоинкремента всегда на 2.

Режимы адресации стека [ править ]

R6, также обозначаемый как SP, используется в качестве аппаратного стека для ловушек и прерываний. Соглашение, обеспечиваемое набором режимов, предоставляемых PDP-11, заключается в том, что стек растет вниз - к более низким адресам - по мере того, как в него помещаются элементы. Когда режим применяется к SP или к любому регистру, который программист выбирает для использования в качестве программного стека, режимы адресации имеют следующие эффекты:

Хотя программные стеки могут содержать байты, SP всегда является стеком слов. Операции автоинкремента и автодекремента для SP всегда на 2.

Набор инструкций [ править ]

PDP-11 оперирует байтами и словами. Байты определяются номером регистра, определяющим младший байт регистра, или ячейкой памяти. Слова задаются номером регистра или ячейкой памяти младшего байта, который должен быть четным числом. В большинстве инструкций, которые принимают операнды, бит 15 установлен для указания байтовой адресации или снят для указания адресации слов. В списках в следующих двух разделах программист на ассемблере добавил B к символу инструкции, чтобы указать байтовую операцию; например, MOV превратился в MOVB.

Некоторые инструкции, например MARK и SOB, не были реализованы на некоторых моделях PDP-11.

Инструкции с двойным операндом [ править ]

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

Команды ADD и SUB используют адресацию слов и не имеют побайтно-ориентированных вариаций.

Некоторые инструкции с двумя операндами используют операнд режима адресации и дополнительный регистровый операнд:

Если используется пара регистров (записанная ниже как «(Reg, Reg + 1)», первый регистр содержит младшую часть операнда и должен быть регистром с четным номером. Следующий регистр с более высоким номером содержит старшую часть часть операнда (или остаток). Исключением является инструкция умножения; Reg может быть нечетным, но если это так, старшие 16 бит результата не сохраняются.

Инструкции с одним операндом [ править ]

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

Инструкции по ветвлению [ править ]

В большинстве инструкций перехода решение о переходе зависит от состояния кодов условий. Команде ветвления обычно предшествует инструкция с двумя операндами CMP (сравнение), BIT (битовая проверка) или инструкция TST с одним операндом (проверка). Арифметические и логические инструкции также устанавливают коды условий. В отличие от процессоров Intel в архитектуре x86 , инструкции MOV также устанавливают их, поэтому для перехода можно использовать инструкцию ветвления в зависимости от того, было ли перемещенное значение нулевым или отрицательным.

Старший байт инструкции определяет операцию. Биты с 9 по 15 - это код операции, а бит 8 - это значение вычисления кода условия, в результате которого выполняется переход. Младший байт - это смещение слова со знаком относительно текущего местоположения программного счетчика. Это позволяет выполнять прямые и обратные переходы в коде.

Ограниченный диапазон инструкций ветвления означал, что по мере роста кода целевые адреса некоторых ветвей становились недоступными. Программист изменил бы однословную BR на двухсловную инструкцию JMP из следующей группы. Поскольку JMP не имеет условных форм, программист должен изменить BEQ на BNE, который разветвляется вокруг JMP.

SOB (вычитание единицы и переход) - еще одна инструкция условного перехода. Указанный регистр уменьшается на 1, и если результат не равен нулю, выполняется обратная ветвь на основе 6-битного смещения слова.

Инструкции подпрограммы [ править ]

Инструкция JSR может сохранить любой регистр в стеке. Программы, которым эта функция не нужна, указали ПК в качестве регистра (ПК JSR, адрес), а подпрограмму, возвращенную с помощью ПК RTS. Если подпрограмма была вызвана, например, с «JSR R4, адресом», то старое значение R4 будет наверху стека, а адрес возврата (сразу после JSR) будет в R4. Это позволило подпрограмме получить доступ к значениям, закодированным в строке, указав (R4) +, или к встроенным указателям, указав @ (R4) +. Автоинкремент прошел мимо этих данных до точки, в которой код вызывающего абонента возобновился. Такая процедура должна указать RTS R4 для возврата к вызывающему.

Инструкции по ловушке [ править ]

Назначение адресов векторов ловушек и исключений [ править ]

Разные инструкции [ править ]

Операции с кодом условия [ править ]

Четыре кода состояния в слове состояния процессора (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. Он предоставил строковые и десятичные инструкции, используемые COBOL и Dibol .

Доступ к слову состояния процессора (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  x (R m ), y (R n ) имела время выборки / выполнения 1,35 микросекунды плюс время источника и назначения по 0,6 микросекунды каждая. , что дает общее время инструкции 2,55 микросекунды. Любой случай, когда адресуемая память не была в кэше, добавляет 1,02 микросекунды. Регистр-регистр ADD R m , R nможет выполняться из кеша за 0,3 микросекунды. С плавающей запятой было еще сложнее, поскольку между ЦП и процессором с плавающей запятой было некоторое перекрытие, но в целом с плавающей запятой было значительно медленнее. Команда сложения с плавающей точкой одинарной точности может составлять от 2,4 до 5,5 микросекунд плюс время на выборку операндов. [4]

Прерывания [ править ]

PDP-11 работал с уровнем приоритета от 0 до 7, объявленным тремя битами в слове состояния процессора (PSW) , а модели высокого класса могли работать в различных режимах: ядро ​​(привилегированный), пользовательский (приложение), и иногда Supervisor, согласно двум битам в PSW.

Чтобы запросить прерывание, устройство шины будет использовать одну из четырех линий общей шины с BR4 по BR7, пока процессор не ответит. Более высокие числа указывают на большую срочность, возможно, что данные могут быть потеряны или нужный сектор может выйти из контакта с головками чтения / записи, если процессор не отреагирует быстро. Готовность принтера к другому символу была самым низким приоритетом (BR4), так как он будет оставаться готовым бесконечно. Если бы процессор работал на уровне 5, то BR6 и BR7 были бы в порядке. Если бы процессор работал на 3 или ниже, он выдал бы любое прерывание; если на 7, он не предоставит ни одного. Запросы на автобус, которые не были удовлетворены, не терялись, а просто откладывались. Устройство, нуждающееся в обслуживании, продолжит подтверждать свой запрос шины.

Каждый раз, когда прерывание превышало уровень приоритета процессора, процессор выдавал соответствующее разрешение шины, от BG4 до BG7. Линии автобуса-гранта не были обычными линиями, а представляли собой гирлянду.: Вход каждого элемента был выходом предыдущего элемента в цепочке. Шлюз был на каждом устройстве шины, и устройство, физически ближе к процессору, было раньше в гирляндной цепи. Если устройство сделало запрос, то, обнаружив вход разрешения шины, оно могло бы сделать вывод, что оно контролирует шину и не передало сигнал разрешения следующему устройству на шине. Если устройство не отправляло запрос, оно распространяло входные данные разрешения шины на выход разрешения шины, давая возможность ответить следующему ближайшему устройству. (Если устройства не занимали слоты, смежные с процессорной платой, «карты предоставления целостности», вставленные в пустые слоты, распространяли линию разрешения шины.)

Получив управление шиной, устройство сбросило свой запрос шины и поместило на шину адрес памяти своего вектора из двух слов. Процессор сохранил счетчик программ (ПК)и PSW, вошли в режим ядра и загрузили новые значения из указанного вектора. Для устройства в BR6 новый PSW в своем векторе обычно будет указывать 6 в качестве нового приоритета процессора, поэтому процессор будет учитывать более срочные запросы (BR7) во время процедуры обслуживания, но откладывать запросы с таким же или более низким приоритетом. В новом ПК процессор перешел к процедуре обслуживания прерывающего устройства. Эта процедура управляла устройством, по крайней мере, устраняя условие, вызвавшее прерывание. Процедура завершилась инструкцией RTI (ReTurn from Interrupt), которая восстановила PC и PSW как раз перед тем, как процессор предоставил прерывание.

Если запрос шины был сделан по ошибке и ни одно устройство не ответило на предоставление шины, процессор прервал тайм-аут и выполнил ловушку, которая предполагала неисправное оборудование.

Язык ассемблера MACRO-11 [ править ]

Перфолента для ПДП-11

MACRO-11 - это ассемблер для PDP-11. Это преемник PAL-11 (Program Assembler Loader), более ранней версии языка ассемблера PDP-11 без средств макросов. MACRO-11 поддерживался во всех операционных системах DEC PDP-11. PDP-11 Unix- системы также включают ассемблер (называемый « as »), структурно подобный MACRO-11, но с другим синтаксисом и меньшим количеством функций.


Заметки [ править ]

  1. ^ "Руководство по процессору PDP-11" (PDF) . Дек . Проверено 13 ноября 2015 года .
  2. ^ pdp11 / 05/10/35/40, Глава 7.
  3. ^ pdp11 / 04 / 34a / 44/60/70, стр. 421.
  4. ^ Руководство по процессору DEC PDP-11/70, 1975, Приложение C, Время выполнения инструкций

Ссылки [ править ]

  • Руководство по процессору pdp11 - pdp11 / 05/10/35/40 . Корпорация цифрового оборудования. 1973 г.
  • Руководство по процессору pdp11 - pdp11 / 04 / 34a / 44/60/70 . Корпорация цифрового оборудования. 1979 г.

Дальнейшее чтение [ править ]

  • Экхаус, младший, Ричард Х .; Моррис, Л. Роберт (1979). Организация, программирование и приложения микрокомпьютерных систем (PDP-11) . Энглвуд Клиффс, Нью-Джерси : Прентис-Холл . ISBN 0-13-583914-9.
  • Майкл Сингер, PDP-11. Программирование на языке ассемблера и организация машин , John Wiley & Sons, NY: 1980.

Внешние ссылки [ править ]

  • PDP-11 Процессор Handbook (Гордон Белл 1969 издание , 1979 издание в bitsavers )
  • Сохранение 16-разрядных миникомпьютеров серии PDP-11
  • Статья Гордона Белла и Билла Стрекера 1975 г. Что мы узнали из PDP-11
  • Эрзац-11 , эмулятор PDP-11
  • Дополнительные документы и ссылки на сайте Гордона Белла .
  • Пушистый шар
  • О LSI-11, RT-11, мегабайтах памяти и Modula-2 / VRS от Günter Dotzel, ModulaWare.com - статья о синергии компилятора / компоновщика Modula-2 для преодоления ограничений адресного пространства PDP / LSI-11, опубликованная в DEC PROFESSIONAL, Журнал для пользователей DEC, Professional Press, Spring House, PA. США, январь 1986 г.