Процессор PDP-32

Архитектура процессора PDP-11 до сих пор считается самлй “красивой” и удобной для программиста. К сожалению, из-за ограничения по памяти (64 кбайт) это семейство вышло из употребления. Но почему бы не попробовать разработать 32-битный вариант? Возможно, это не будет очень практично, но для обучения программированию такой процессор может оказаться полезнее, чем MMIX Дональда Кнута.

Полностью сохраняется мнемоника ассемблерных команд. Сохраняется семантика большинства команд процессора. Представляется, что адаптация существующих систем программирования, например GNU binutils и GCC, для PDP-32 может быть выполнена в разумные сроки.

Отличия от PDP-11:

  • нет команд ASHC, SOB, MARK
  • нет команд BPT, RTT
  • нет команд IOT, TRAP, WAIT, RESET
  • поведение команд MUL и DIV отличается
  • новые команды обработки полуслов CLRH, COMH, INCH, DECH, NEGH, ADCH, SBCH, TSTH, RORH, ROLH, ASRH, ASLH, MOVH, CMPH, BITH, BICH, BISH

При подготовке статьи использовались фрагменты работы Негоды и Никищенкова.

Регистры

Процессор PDP-32 имеет шестнадцать 32-разрядных регистров R0-R15 и 8-битное слово состояния PSW. Регистр R14 также называется SP и используется как указатель стека. Регистр R15 имеет название PC и содержит адрес текущей выполняемой команды.

31 — биты — 0
R0
R1
...
R13
R14 - SP ← указатель стека
R15 - PC ← счетчик команд

Операнды, размещаемые в регистрах, могут быть тридцатидвухразрядными (слова) шестнадцатиразрядными (полуслова) и восьмиразрядными (байты). При этом восьмиразрядные операнды размещаются в младшем байте регистра, шестнадцатиразрядные - в младшем полуслове. Байт в памяти может иметь любой адрес. Полуслово может иметь только четный адрес, слово — только адрес, кратный 4. Указатель стека SP и счетчик команд PC являются указателями на слова памяти, поэтому должны быть кратны 4.

Слово состояния PSW

7 6 5 4 3 2 1 0
IM T N Z V C

  • C — Carry — перенос
  • V — oVerflow — переполнение
  • Z — Zero — нулевой результат
  • N — Negative — отрицательный результат
  • T — Trace — разрешение трассировки
  • IM — Interrupt Mask — запрет прерываний

Все знаковые числа внутри ЭВМ представлены в дополнительном коде. Старший разряд знаковый. Поскольку знаковый разряд двоичного числа в дополнительном коде участвует в арифметических операциях так же как и другие разряды, наличие знака не влияет на правила выполнения арифметических операций. Различение происходит в признаках результата. Если выполняется сложение двух беззнаковых чисел, то переполнение обнаруживается в признаке переноса C. Если же складываются знаковые числа, то процессор фиксирует переполнение в признаке V, а знак результата в N. Если сравниваются два числа без знака, то соотношения “меньше”, “больше”, “меньше или равно” и “больше или равно” определяются признаками Z и С. Если же сравниваются числа со знаком, то эти соотношения определяются признаками N, Z и V.

Бит T вызывает прерывание после выполнения очередной команды. Используется отладчиком для пошагового выполнения программы.

Память

Слово 31 — биты — 24 23 — биты — 16 15 — биты — 8 7 — биты — 0
0000’0000 байт 0000’0003 байт 0000’0002 байт 0000’0001 байт 0000’0000
0000’0004 байт 0000’0007 байт 0000’0006 байт 0000’0005 байт 0000’0004
... ... ... ... ...
FFFF’FFFС байт FFFF’FFFF байт FFFF’FFFE байт FFFF’FFFD байт FFFF’FFFC

В PDP-32 нет специальных команд ввода-вывода. Объекты ввода-вывода адресуются как ячейки памяти. Диапазон адресов FFF0’0000....FFFF’FFFC обычно используется для обращения к внешним устройствам.

Здесь и далее для кодов и чисел по умолчанию используется шестнадцатеричная система счисления.

Форматы команд

Команда PDP-32 может размещаться в 1, 2 или 3 словах. Второе и третье слова всегда являются адресными и могут содержать непосредственный операнд, абсолютный адрес, смещение для индексной адресации. Первое слово определяет операцию, длину операнда и методы адресации. Основными являются следующие форматы первых слов команды:

Двухадресные команды:

31—28 27—————————16 15 14-13-12 11-10-9-8 7 6-5-4 3-2-1-0
BWH Opcode MS RS MD RD

Одноадресные команды:

31—28 27—————————16 15———————————8 7 6-5-4 3-2-1-0
BWH Opcode MD RD

Безадресные команды:

31——————————————16 15————————————————————0
Opcode

Команды ветвления:

31—————24 23—————————————————————————————0
Opcode

  • BWH - признак длины операнда (Byte / Word / Halfword): 0 - слово, 1 - байт, 2 - полуслово
  • MS, MD - методы адресации операнда-источника (Source) и операнда-приемника (Destination)
  • RS, RD - номера регистров, используемых при адресации операнда-источника и операнда-приемника

Способы адресации

Под метод адресации в коде команды выделено три бита.

Метод Мнемоника Название Операнд
0 R Регистровая R
1 (R) Регистровая косвенная M[ R ]
2 (R)+ Автоинкрементная M[ R++ ]
3 @(R)+ Автоинкрементная косвенная M[ M[ R++ ] ]
4 –(R) Автодекрементная M[ ––R ]
5 @–(R) Автодекрементная косвенная M[ M[ ––R ] ]
6 X(R) Индексная M[ R + *PC++ ]
7 @X(R) Индексная косвенная M[ M[ R + *PC++ ] ]

Комбинация метода адресации с регистром R15 (PC) дает:

Метод Мнемоника Название Операнд
2F #Op Непосредственная *PC++
3F @#EA Абсолютная M[ *PC++ ]
6F EA Относительная M[ PC + *PC++ ]
7F @IA Косвенно-относительная M[ M[ PC + *PC++ ] ]

Изменение значения регистров R0-R13 при адресации R++ и – –R выполняется:

  • на 1 — для команд обработки байтов
  • на 2 — для команд обработки полуслов
  • на 4 — в остальных случаях

Регистры PC и SP всегда рассматриваются как указатели на слова, а не байты, поэтому в операциях PC++, – –SP и им подобных выполняется модификация значения на 4.

Команды

Коды команд выбраны похожими на PDP-11. Список кодов, упорядоченный по значению, можно посмотреть здесь.

Одноадресные и двухадресные команды обработки данных

Команды пересылки и установки признаков результата:

Код N Z V C Операция Действия
CLR *050 xx DD 0 1 0 0 Очистка D = 0
MOV *100 SS DD + + 0 - Пересылка D = S
SWAB 0003 xx DD + - 0 0 Перестановка байтов D = D[7..0]•D[15..8]•D[23..16]•D[31..24]
MFPS 1067 xx DD - - - - Чтение PSW D = PSW
MTPS 1064 xx SS + + + + Запись PSW PSW = S
TST *057 xx DD + + 0 0 Проверка D = D

Логические операции:

Код N Z V C Операция Действия
COM *051 xx DD + + 0 1 Инвертирование D = ^D
BIT *300 SS DD + + 0 - Проверка разрядов S & D
BIC *400 SS DD + + 0 - Очистка разрядов D &= ^S
BIS *500 SS DD + + 0 - Логическое сложение D ^= S
XOR 0740 xR DD + + 0 - Исключающее ИЛИ D ^= R

Арифметические операции и сдвиги:

Код N Z V C Операция Действия
INC *052 xx DD + + + - Увеличение на 1 D++
DEC *053 xx DD + + + - Уменьшение на 1 D––
CMP *200 SS DD + + + + Сравнение S – D
ADD 0600 SS DD + + + + Сложение D += S
SUB 0610 SS DD + + + + Вычитание D –= S
ADC *055 xx DD + + + + Добавление переноса D += C
SBC *056 xx DD + + + + Вычитание переноса D –= C
NEG *054 xx DD + + + + Изменение знака D = 0 – D
SXT 0067 xx DD + + + + Расширение знака D[*] = N
MUL 0700 xR SS + + 0 + Умножение R *= S
DIV 0710 xR SS + + + + Деление R /= S
ASR *062 xx DD + + + + Арифм. сдвиг вправо D•C = D[ст]•D
ASL *063 xx DD + + + + Арифм. сдвиг влево C•D = D•0
ROR *060 xx DD + + + + Цикл. сдвиг вправо D•C = C•D
ROL *061 xx DD + + + + Цикл. сдвиг влево C•D = D•C
ASH 0720 xR SS + + + + Арифм. сдвиг S>0 ? R «= S : R »= -S

Команды управления программой и прерываниями

Безусловный переход и организация подпрограмм:

Код N Z V C Операция Действия
JMP 0001 xx DD - - - - Безусловный переход PC = &D
JSR 0040 xR DD - - - - Обращение к подпрограмме *(––SP) = R; R = PC; PC = &D
RTS 0002 xx xR - - - - Возврат из подпрограммы PC = R; R = *SP++

Программные прерывания и управление:

Код N Z V C Операция Действия
EMT 0041 xxxx + + + + Прерывание для системных программ *––SP = PSW; *––SP = PC; PC = *(18h); PSW = *(18h+4)
RTI 0004 xxxx + + + + Возврат из прерывания PC = *SP++; PSW = *SP++
HALT 0000 xxxx - - - - Останов Ожидание внешнего прерывания
NOP 0240 xxxx - - - - Нет операции Пустая команда

Команды ветвления

Если условие ветвления выполняется, то PC += AAAAAA, где AAAAAA - младшие три байта команды. Слово состояния PSW не изменяется.

Код Условие Признаки
BR 41 AAAAAA Безусловно нет
BNE 42 AAAAAA Не нуль; неравенство Z == 0
BEQ 43 AAAAAA Нуль; равенство Z == 1
BPL 50 AAAAAA Плюс N == 0
BMI 51 AAAAAA Минус N == 1
BVC 54 AAAAAA Нет переполнения V == 0
BVS 55 AAAAAA Есть переполнение V == 1
BCC 56 AAAAAA Нет переноса C == 0
BCS 57 AAAAAA Есть перенос С == 1

Ветвления по неравенству чисел со знаком:

Код Условие Признаки
BLT 45 AAAAAA Меньше N ~ V == 1
BGT 46 AAAAAA Больше Z | (N ~ V) == 0
BLE 47 AAAAAA Меньше или равно Z | (N ~ V) == 1
BGE 44 AAAAAA Больше или равно N ~ V == 0

Ветвления по неравенству чисел без знака:

Код Условие Признаки
BLO 57 AAAAAA Меньше C == 1
BHI 52 AAAAAA Больше Z | C == 0
BLOS 53 AAAAAA Меньше или равно Z | C == 1
BHIS 56 AAAAAA Больше или равно C == 0

Команды изменения признаков в PSW

Код N Z V C Действия
CLN 0250 xxxx + - - - N = 0
CLZ 0244 xxxx - + - - Z = 0
CLV 0242 xxxx - - + - V = 0
CLC 0241 xxxx - - - + C = 0
CCC 0257 xxxx + + + + N=Z=V=C=0
SEN 0270 xxxx + - - - N = 1
SEZ 0264 xxxx - + - - Z = 1
SEV 0262 xxxx - - + - V = 1
SEC 0261 xxxx - - - + С = 1
SCC 0277 xxxx + + + + N=Z=V=C=1

Прерывания

Прерывания в PDP-32 в зависимости от инициатора делят на программные и аппаратные. Прерывания по инициативе программы возникают, когда процессор выполняет одну из команд EMT, TRAP, IOT, BPT. Аппаратное прерывание возникает, когда процессор перед началом выборки следующей команды обнаружил внешний запрос на прерывание. При этом разряд PSW[7] имеет смысл признака запрета прерывания. При входе в прерывание выполняются действия:

  • сохранение PSW в стеке (*– –SP = PSW);
  • сохранение адреса возврата в стеке (*– –SP = PC);
  • занесение стартового адреса программы обработки прерывания в PC из первого слова вектора прерывания (PC = *AV);
  • занесение нового значения PSW из второго слова вектора прерывания (PC = *(AV+4)).

Выход из подпрограммы обработки прерывания происходит по команде RTI, выполнение которой заключается в восстановлении из стека адреса возврата (PC = *SP++) и старого значения PSW (PSW = *SP++). Командам вызова программных прерываний соответствуют вполне определенные адреса двухсловных векторов прерываний. Адрес вектора аппаратного прерывания передается в процессор блоком сопряжения с ВУ, когда тот получает от процессора подтверждение, что его требование прерывания удовлетворяется. Вектора в PDP-32 занимают пространство памяти с адресами в диапазоне 0..256.

Вектор Причина
00 Cтарт системы
08 Значение PC или SP не кратно 4
10 Неизвестный код команды
18 Системный вызов EMT
20 Прерывание трассировки

Страничная организация памяти

(не проработано)

 
proj/pdp11/pdp32.txt · Последние изменения: 2006/08/23 00:14 vak
 
Copyright (C) 1996-2013 Serge Vakulenko
serge@vak.ru