Architektura PDP-11

Architektura PDP-11 je instrukční sada (ISA) vyvinutá firmou Digital Equipment Corporation (DEC). Je implementována centrálními procesorovými jednotkami (CPU) a mikroprocesory používanými v minipočítačích PDP-11. Architektura byla široce používána v 70. letech 20. století, ale v 80. letech 20. století ji nahradila výkonnější architektura VAX-11.

Paměť

Datové formáty

PDP-11 ukládá šestnáctibitová slova do paměti způsobem little endian (s méně významným bajtem jako prvním). Díky oblíbenosti PDP-11 bývá tento formát stále označován jako pdp-endian. 32bitová data podporovaná rozšířeními základní architektury, například pro čísla v pohyblivé řádové čárce v Instrukční sadě FPU, dvojslova v Rozšířené instrukční sadě nebo dlouhá data v Komerční instrukční sadě byla ukládána různými způsoby, včetně neobvyklého formátu mixed endian[1][2].

Správa paměti

16bitové adresy umožňují počítačům PDP-11 adresovat 64 KB. V době nástupu počítačů VAX začínaly být 8bitové bajty a šestnáctkový zápis adres průmyslovým standardem; u počítačů PDP-11 se ale pro číselné hodnoty používala osmičková soustava a velikost paměti se vždy uváděla v dvoubajtových slovech. Základní logický adresní prostor byl tedy 32K slov, ale poslední 4K slov (s adresami 1600008 až 1777778) nebyly obsazeny pamětí, protože tento rozsah sloužil pro adresování hardwarových registrů vstupních a výstupních zařízení. Původní počítače PDP-11 s maximální velikostí paměti měly tedy 28K slov paměti.

Nejnižší adresy paměti jsou rezervovány pro dvouslovné vektory přerušení, které jsou tvořeny hodnotou programového čítače a stavového slova procesoru, se kterými se spouští obslužná funkce přerušení. Když V/V zařízení vyvolá přerušení, nastaví na sběrnici adresu svého vektoru pro indikaci, jaká obslužná funkce má převzít řízení. První vektory patřily obslužným funkcím pro obsluhu různých typů trapů. Trapy se vyvolávají při určitých programových chybách, například při aritmetickém přetečení nebo při pokusu o provedení nedefinované instrukce; také když program provedl některou z instrukcí jako BPT, EMT, IOT nebo TRAP, které slouží k vyvolání služby operačního systému.

Rozšíření paměti

Článek PDP-11 popisuje jak se 16bitový logický adresní prostor stal nepřekonatelným omezením. Během života PDP-11 byly pro obejití tohoto omezení používány následující techniky:

  • Pozdější modely PDP-11 procesorů obsahovaly jednotku správy paměti, která podporovala virtuální adresování. Fyzická adresy byl rozšířena na 18 nebo 22 bitů, což umožňovalo adresovat až 256 KB nebo 4 MB RAM. Logický adresní prostor (tj. adresní prostor dostupný v libovolném okamžiku bez změny tabulky mapování paměti) však zůstal omezen na prostor adresovatelný 16 bity.
  • Některé modely počínaje PDP-11/45 mohly pracovat v režimu, kdy používaly 32K slov (64 KB) jako „instrukční prostor“„“ pro kód programu, a dalších 32K slov pro data. Některé operační systémy, především Unix od vydání V7 a RSX11-M+ tuto vlastnost využívaly.
  • Programovací techniky mohly skrývat problémy se stránkováním před aplikačními programátory. Například překladač jazyka Modula-2 vytvářel kód, ve kterém běhový systém při volání jednotlivých procedur přepínal 8KB stránky do logického adresního prostoru. (Viz externí reference zde.)

Registry procesoru

Registry DEC PDP-11
15141312111009080706050403020100(číslo bitu)
Víceúčelové registry
R0Registr 0
R1Registr 1
R2Registr 2
R3Registr 3
R4Registr 4
R5Registr 5
Ukazatel zásobníku
R6 / SPRegistr 6 / Stack Pointer
Programový čítač
R7 / PCRegistr 7 / Program Counter
Stavové příznaky
 ITNZVCProcessor Status Word
  Floating Point Status Register

Obvykle se uvádí, že CPU PDP-11 obsahuje osm víceúčelových 16bitových registrů (R0 až R7). Registr R7 však funguje jako programový čítač (PC). Jako ukazatel zásobníku je možné použít libovolný z ostatních registrů, ale pro hardwarová přerušení a trapy se jako ukazatel zásobníku (SP) používá registr R6.

Režimy adresování

Ve většině instrukcí se pro výběr operandu používá šest bitů. Tři bity vybírají jeden z osmi režimů adresování a další tři bity vybírají jeden z osmi víceúčelových registrů. Z používání tříbitových skupin přirozeně vyplynulo používání osmičkové notace.

Každá položka v následující části ukazuje, jak by byl v jazyce symbolických adres zapsán operand pro hypotetickou jednooperandovou instrukci se jménem OPR. Rn znamená jeden z registrů, ve skutečnosti zapisovaný jako R0 až R7. (Rn) je obsah registru Rn.

Režimy adresování s víceúčelovými registry

Následujících osm režimů může být aplikováno na libovolný víceúčelový registr. Jejich význam při použití na R6 (ukazatel zásobníku, SP) nebo R7 (programový čítač, PC) jsou uvedeny odděleně v následující části.

KódJménoPříkladPopis
0nRegisterOPR RnOperand je v Rn
1nRegister deferredOPR (Rn)Rn obsahuje adresu operandu
2nAutoincrementOPR (Rn)+Rn obsahuje adresu operandu, pak inkrementovat Rn
3nAutoincrement deferredOPR @(Rn)+Rn obsahuje adresu adresy, pak inkrementovat Rn o 2
4nAutodecrementOPR −(Rn)Dekrementovat Rn, pak použít jeho obsah jako adresu
5nAutodecrement deferredOPR @−(Rn)Dekrementovat Rn o 2, pak použít jeho obsah jako adresu adresy
6nIndexOPR X(Rn)Rn+X je adresa operandu
7nIndex deferredOPR @X(Rn)Rn+X je adresa adresy

V režimech index a index deferred je X 16bitová hodnota uložená ve druhém slově instrukce. V instrukcích se dvěma operandy může jeden, druhý nebo oba operandy používat libovolný z těchto režimů. Instrukce, které používají pro oba operandy režim index nebo index deferred mají délku tři slova.

V instrukcích pracujících s bajty se provádí autoinkrementace a autodekrementace registru o 1, v instrukcích pracujících se slovy o 2 kdykoli se používá deferred režim, protože velikost paměti, kterou adresuje registrový ukazatel je slovo.

Režimy adresování s programovým čítačem

Pokud se pro adresování použije registr R7 (programový čítač), čtyři z režimů adresování přirozeně dávají užitečné efekty:

KódJménoPříkladPopis
27ImmediateOPR #nOperand je obsažen v instrukci
37AbsoluteOPR @#aAbsolutní adresa je obsažena v instrukci
67RelativeOPR aAdresa je dána součtem dalšího slova v instrukci a PC+2
77Relative deferredOPR @aAdresa adresy je dána součtem dalšího slova v instrukci a PC+2

Pro adresování paměti (proměnných a cílů skoků) se používá relativní režim (který má nejjednodušší syntaxi). Program, který pro všechny interní odkazy používá relativní režim (a relativní deferred režim), je pozičně nezávislý; nemá žádné požadavky na vlastní umístění, takže je možné jej zavést na libovolnou adresu v paměti nebo jej dokonce přesouvat bez nutnosti upravovat adresy, aby odpovídaly jeho umístění (tj. není nutná relokace programu). Tento způsob počítání adres relativně k aktuálnímu umístění vlastně znamená, že procesor provádí relokaci přímo při běhu.

Absolutní režim se používá pouze pro adresování hardwarových registrů vstupních a výstupních zařízení, které mají pevné adresy. Pro zápis operandu v absolutním režimu se používá @#, tj. kombinace symbolů pro bezprostřední a deferred režim.

Režimy immediate a absolute jsou vlastně režimy autoinkrement a autoinkrement deferred aplikované na programový čítač. Otázka, zda se má operand nebo adresa považovat za součást instrukce (jak je napsáno v tabulce) nebo za slovo, které se nachází za instrukcí, a po jehož načtení se také inkrementuje PC, je subjektivní. Každopádně PC se vždy považuje za ukazatel na slovo, takže autoinkrementace je vždy o 2.

Režimy adresování zásobníku

Registr R6 nazývaný také SP se používá jako ukazatel hardwarového zásobníku pro trapy a přerušení. Chování adresovacích režimů vyžaduje, aby zásobník rostl směrem k nižším adresám. Když je některý z dostupných adresovacích režimů aplikován na SP nebo na libovolný registr, který si programátor vybere jako ukazatel na softwarový zásobník, mají režimy adresování následující výsledky:

KódJménoPříkladPopis
16Deferred(SP)Operand je na vrcholu zásobníku (nechat ho tam)
26Autoincrement(SP)+Vyzvedni operand z vrcholu zásobníku
36Autoincrement deferred@(SP)+Vyzvedni ukazatel na operand z vrcholu zásobníku
46Autodecrement−(SP)Ulož hodnotu na zásobník
66IndexedX(SP)Operand je na zásobníku vzdálený X od vrcholu
76Indexed deferred@X(SP)Na zásobníku ve vzdálenosti X od vrcholu je ukazatel na operand

I když softwarové zásobníky mohou být tvořeny jednotlivými bajty, SP vždy adresuje zásobník tvořený slovy. Proto autoinkrementace a autodekrementace SP je vždy o 2.

Instrukční sada

PDP-11 pracuje s bajty a se slovy. Bajty mohou být zadány číslem registru, které identifikuje nižší bajt v registru, nebo adresou v paměti. Slova mohou být zadána číslem registru nebo adresou nižšího bajtu v paměti; adresa v tomto případě musí být sudé číslo. Ve většině instrukcí, které mají operandy, rozlišuje bit 15, zda se jedná o instrukci pracující s bajty nebo slovy: pokud je bit 15 nastaven, jedná se o instrukci pracující s bajty; pokud je vynulován, je to instrukce pro práci se slovy. V seznamech v následujících dvou částech jsou mnemoniky instrukcí pracujících s bajty zakončeny písmenem B; například instrukce MOV pracující s bajty je uvedena jako MOVB.

Instrukce se dvěma operandy

Čtyři nejvyšší bity udávají, o jakou operaci se jedná (přičemž bit 15 zpravidla určuje, zda se pracuje se slovy nebo s bajty). Zbývající bity tvoří dvě skupiny po šesti bitech, které udávají režim a registr každého ze dvou operandů, jak je definováno výše.

151412119865320
BOperační kódRežimZdrojRežimCíl
Operační kódMnemonikaVýznam
01MOVPřesun: dest = src
11MOVB
02CMPPorovnání: spočítá src − dest, nastaví pouze příznaky
12CMPB
03BITBitový test: spočítá dest & src, nastaví pouze příznaky
13BITB
04BICVynulování bitů: dest &= ~src
14BICB
05BISNastavení bitů, neboli logické OR: dest |= src
15BISB
06ADDSčítání, dest += src
16SUBOdčítání, dest −= src

Instrukce ADD a SUB jsou k dispozici pouze pro práci se slovy (nemají bajtové varianty).

Některé přídavné dvouoperandové instrukce musí mít jako zdrojový operand registr:

1512119865320
0111Operační kódRegistrRežimZdroj/Cíl

Pokud instrukce používá dvojici registrů (popsanou níže jako "(R,R+1)"), obsahuje první registr nejméně významné bity a musí být sudý. Druhý registr obsahuje významnější bity (nebo zbytek po dělení). Výjimkou je instrukce násobení; R může být lichý, ale pak se horních 16 bitů výsledku nikam neukládá.

Operační kódMnemonikaVýznam
070MULNásobení: (R,R+1) = R × src
071DIVDělení: Spočítat (R,R+1) ÷ src; podíl v R, zbytek v R+1
072ASHAritmetický posuv: R <<= src, velikost posunutí může být −32 až 31.
073ASHCAritmetický posuv kombinovaný: (R,R+1) <<= src, velikost posunutí může být −32 až 31.
074XORNon-ekvivalence: dest ^= reg (pouze pro slova)
075(operace s pohyblivou řádovou čárkou)
076(systémové instrukce)
077SOBOdečtení jedničky a větvení: Dekrementuje registr; jestliže výsledek je nenulový, skočí zpátky o 0 až 63 slov.

Instrukce s jedním operandem

Nejvyšších 9 bitů udává, jaká operace má být provedena (bit 15 obecně vybírá adresování po slovech nebo po bajtech). (Operací není tolik, kolik by se zdálo, protože většina kombinací nejvyšších čtyř bitů je obsazena instrukcemi se dvěma operandy.) Jedna skupina šesti bitů určuje režim a registr operandu, jak je definováno výše.

15111065320
B0001Operační kódRežimRegistr
Operační kódMnemonikaVýznam
0003SWABProhození bajtů: rotace 8 bitů
004r(Skok do podprogramu)
104x(Emulátor trap)
0050CLRVynulování: dest = 0
1050CLRB
0051COMDoplněk: dest = ~dest
1051COMB
0052INCInkrement: dest += 1
1052INCB
0053DECDekrement: dest −= 1
1053DECB
0054NEGNegace: dest = −dest
1054NEGB
0055ADCPřičtení přenosu: dest += C
1055ADCB
0056SBCOdečtení přenosu: dest −= C
1056SBCB
0057TSTTest: Nastav příznaky podle hodnoty src
1057TSTB
0060RORRotace vpravo o 1 bit
1060RORB
0061ROLRotace vlevo o 1 bit
1061ROLB
0062ASRPosuv vpravo: dest >>= 1
1062ASRB
0063ASLPosuv vlevo: dest <<= 1
1063ASLB
0064MARKNávrat z podprogramu, přeskočí 0 až 63 instrukčních slov
1064MTPSPřesun do stavového registru: PS = src
0065MFPIPřesun z předchozího instrukčního prostoru: −(SP) = src
1065MFPDPřesun z předchozího datového prostoru: −(SP) = src
0066MTPIPřesun do předchozího instrukčního prostoru: dest = (SP)+
1066MTPDPřesun do předchozího datového prostoru: dest = (SP)+
0067SXTZnaménkové rozšíření: dest = (16 kopií příznaku N)
1067MFPSPřesun z stavového registru: dest = PS

Instrukce SWAB, která přehazuje vyšší bajt ve slově s nižším, má pouze variantu pro bajty.

Podmíněné instrukce skoku

Většinu skokových instrukcí lze podmínit stavem podmínkových kódů v PSW. Instrukci skoku typicky předchází dvouoperandová instrukce CMP (porovnání) nebo BIT (bitový test) nebo jednooperandová instrukce TST (test). Ale podmínkové kódy se nastavují i aritmetickými a logickými instrukcemi a (v kontrastu s architekturou X86 procesorů Intel) instrukcemi MOV, takže rozhodnutí o skoku lze provést po pouhém přesunu dat.

Vyšší bajt určuje operaci. Méně významný bajt je posunutí relativní vůči aktuální hodnotě programového čítače. Posunutí se uvádí vždy ve slovech (takže se hodnota posunutí před přičtením k programovému čítači znásobí dvěma) a je bráno jako číslo se znaménkem, což umožňuje provádět skoky v kódu dopředu i zpět.

151110870
x0000Operační kódOffset
Operační kódMnemonikaVýznam
0000xx(Systémové instrukce)
0004xxBRNepodmíněný skok
0010xxBNESkok při nerovnosti (Z=0)
0014xxBEQSkok při rovnosti (Z=1)
0020xxBGESkok při větší nebo rovno (N|V = 0)
0024xxBLTSkok při menší než (N|V = 1)
0030xxBGTSkok při větší než (N^V = 1)
0034xxBLESkok při menší nebo rovno (N^V = 0)
1000xxBPLSkok při kladném čísle (N=0)
1004xxBMISkok při záporném čísle (N=1)
1010xxBHISkok při větší než (C|Z = 0)
1014xxBLOSSkok při menší nebo rovno (C|Z = 1)
1020xxBVCSkok při nepřítomnosti přetečení (V=0)
1024xxBVSSkok při přetečení (V=1)
1030xxBCCSkok při vynulovaném přenosu (C=0)
BHISSkok při větší nebo rovno (C=0)
1034xxBCSSkok při nastaveném přenosu (C=1)
BLOSkok při menší než (C=1)

Další instrukcí podmíněného skoku je SOB (zmenšení o jednu a větvení), která je uvedena výše u dvouoperandových instrukcí. Registrový operand je dekrementován; jestliže výsledek je nenulový, spodních šest bitů se použije jako číslo bez znaménka udávající počet instrukcí, o které se má provést skok zpět.

Omezený rozsah skokových instrukcí znamená, že pokud je potřeba provést skok na větší vzdálenost (při zvětšování rozsahu kódu) je nutné nahradit instrukce typu BR s délkou jednoho slova instrukcemi JMP, které mají délku dvě slova. Protože instrukce JMP je pouze nepodmíněná, programátor musí změnit např. BEQ na BNE, kterou přeskočí instrukci JMP.

Instrukce skoků, volání podprogramů a návratů z podprogramů

  • JMP (skok, jump)
  • JSR (skok na podprogram - viz níže)
  • RTS (návrat z podprogramu - viz níže)
  • MARK (podpora čištění zásobníku při návratu z funkce)
  • EMT (emulátor trap)
  • TRAP, BPT (breakpoint trap)
  • IOT (vstupně/výstupní trap)
  • RTI & RTT (návrat z přerušení)

Instrukce JSR může na zásobník uložit obsah libovolného registru. Instrukce, které tuto vlastnost nepotřebují, používají registr PC (JSR PC,adresa) a návrat z funkce se provádí pomocí RTS PC. Pokud se funkce vyvolala instrukcí JSR R4, adresa, pak původní hodnota R4 bude na vrcholu zásobníku a návratová adresa (instrukce následující za JSR) bude v R4. To umožňuje, aby kód funkce pomocí (R4)+ přistupoval k hodnotám uloženým in-line nebo pomocí @(R4)+ k in-line ukazatelům. Autoinkrementace posune ukazatel za tato data do místa, v němž pokračuje kód volající funkce. Taková funkce musí použít RTS R4 pro návrat do volající funkce.

Různé instrukce

  • HALT, WAIT (čekání na přerušení)
  • RESET (reset sběrnice UNIBUS)

Operace s podmínkovými kódy

  • CLC, CLV, CLZ, CLN, CCC (vynuluje zvolený podmínkový kód)
  • SEC, SEV, SEZ, SEN, SCC (nastaví zvolený podmínkový kód)

Čtyři podmínkové kódy ve stavovém slově procesoru (PSW) jsou

  • N nastavený pro zápornou hodnotu
  • Z nastavený pro nulu (nebo pro je rovno)
  • V nastavené pro aritmetické přetečení (při výpočtech s celými čísly se znaménkem)
  • C nastavené při přenosu z nejvyššího řádu

Instrukce SCC nastaví všechny čtyři podmínkové kódy; instrukce CCC je vynuluje.

Rozšiřující sady instrukcí

Rozšířená instrukční sada

(anglicky Extended Instruction Set, EIS) EIS bylo volitelné rozšíření pro modely 11/35/40 a 11/03; na novějších procesorech bylo EIS standardní.

  • MUL, DIV násobení a dělení celočíselných operandů ve dvojici registrů
  • ASH, ASHC aritmetický posuv registru nebo dvojice registrů. Kladná velikost posunutí znamenala posuv vlevo, záporná posuv vpravo.
Instrukční sada s pohyblivou řádovou čárkou

(anglicky Floating Instruction Set, FIS) FIS instrukční sada bylo volitelné rozšíření pro PDP-11/35/40 a 11/03

  • Operace FADD, FSUB, FMUL, FDIV pro čísla s jednoduchou přesností, pracující se zásobníkem adresovaným registrovým operandem.
Procesor s pohyblivou řádovou čárkou

(anglicky Floating Point Processor, FPP) Procesor s pohyblivou řádovou čárkou bylo volitelné rozšíření PDP-11/45 a většiny následujících modelů.

  • Kompletní sada operací v pohyblivé řádové čárce s operandy v jednoduché nebo dvojnásobné přesnosti, které se vybíraly bitem jednoduchá/dvojnásobná přesnost ve stavovém registru pro pohyblivou řádovou čárku
  • formát dat v pohyblivé řádové čárce s jednoduchou přesností byl předchůdcem formátu IEEE 754: byl tvořen znaménkovým bitem, 8bitovým exponentem a 23bitovou mantisou se skrytým 24. bitem
Komerční instrukční sada

(anglicky Commercial Instruction Set, CIS) CIS bylo u modelů 11/23/24 implementováno volitelným mikrokódem, u modelů 11/44 a v jedné verzi 11/74 přídavným modulem. CIS obsahovala řetězcové a desítkové operace používané v jazycích COBOL a Dibol.

Přístup ke stavovému slovu procesoru

(anglicky Processor Status Word, PSW) PSW bylo mapováno na paměťovou adresu 177 776, ale instrukce dostupné na všech PDP-11, kromě nejstarších umožňovaly programům přímější přístup k PSW:

  • SPL (nastavení úrovně priority)
  • MTPS (přesun do stavového slova procesoru)
  • MFPS (přesun ze stavového slova procesoru)
Přístup k jiným paměťovým prostorům

Na variantách PDP-11, které umožňují používat více instrukčních a datových prostorů, se pro přístup k jiným prostorům používá sada neortogonálních instrukcí Move. Například funkce operačního systému, které provádějí běhové volání služeb používají tyto instrukce pro výměnu informací s volajícím.

  • MTPD (přesun do předchozího datového prostoru)
  • MTPI (přesun do předchozího instrukčního prostoru)
  • MFPD (přesun z předchozího datového prostoru)
  • MFPI (přesun z předchozího instrukčního prostoru)

Nekonzistentní instrukce

Během vývoje počítačů řady PDP-11 se objevily nepatrné rozdíly v implementaci instrukcí a kombinacích režimů adresování, aniž by některá z implementací byla označena za jedinou správnou. Nekonzistence neovlivňovaly obyčejné použití PDP-11.

Například instrukce MOV R5,-(R5) přesune hodnotu z registru do paměti na adresu, kam registr ukazuje po své dekrementaci o 2. Mikroprogramované procesory mohly provést úplné vyhodnocení zdrojového operandu před vyhodnocením cílového operandu, takže byla přesunuta hodnota před dekrementací. PDP-11 implementované obvodově mohlo provést nejdřív dekrementaci, protože tento postup u podobných instrukcích šetří hodinové cykly.

Rychlost

Rychlost procesorů počítačů PDP-11 se lišila v závislosti na modelu, konfiguraci paměti, operačním kódu a režimu adresování. Doba provádění instrukcí se skládá až ze tří složek: načtení vlastní instrukce, doby pro přístup ke zdrojovému operandu a doby pro přístup k cílovému operandu. Poslední dvě složky závisí na režimu adresování. Například na PDP-11/70 (okolo roku 1975) instrukce tvaru ADD x(Rm),y(Rn) měly čas načtení/provedení 1,35 mikrosekundy plus 0,6 mikrosekundy pro přístup k zdrojovému nebo cílovému operandu, takže celková doba trvání instrukce je 2,55 mikrosekundy. Pokud obsah adresované paměti není v cache, je nutné přidat 1,02 mikrosekundy. Instrukci ADD Rm,Rn používající pouze registry lze provést z cache za 0,3 mikrosekundy. U operací v pohyblivé řádové čárce je určení doby trvání ještě složitější, protože u nich dochází k překryvům mezi hlavním procesorem a procesorem pro operace v pohyblivé řádové čárce. Ale obecně jsou operace v pohyblivé řádové čárce výrazně pomalejší. Instrukce sčítání v pohyblivé řádové čárce s jednoduchou přesností může trvat 2,4 až 5,5 mikrosekundy plus čas na načtení operandů.[3]

Přerušení

Zařízení, které vyžaduje pozornost procesoru, musí aktivovat jeden ze čtyř společných vodičů sběrnice BR4 až BR7, dokud procesor neodpoví. Vyšší číslo znamená větší naléhavost, kdy by mohlo dojít ke ztrátě dat (např. požadovaný sektor může ujet zpod čtecí a záznamové hlavy), pokud by procesor nezareagoval rychle. Připravenost tiskárny přijmout další znak může mít nejnižší prioritu (BR4), protože tato situace trvá neomezenou dobu.

Procesor PDP-11 může pracovat v 8 úrovních priority s hodnotami 0 až 7. Aktuální hodnota priority je uložena ve třech bitech stavového registru (PSW). Procesor reaguje pouze na přerušení, jejichž priorita je vyšší než aktuální úroveň priority procesoru. Jestliže procesor pracuje na úrovni 5, pak bude reagovat na signál na vodičích BR6 a BR7. Jestliže procesor pracuje na úrovni 3 nebo nižší, bude reagovat na všechny požadavky na přerušení; na úrovni 7 na žádné. Požadavky na přerušení, které nebyly zpracovány, nejsou ztraceny, ale pouze pozdrženy. Zařízení, které potřebovalo obsluhu, bude stále udržovat svůj požadavek na přerušení.

Když je úroveň vyžadovaného přerušení vyšší než úroveň priority procesoru, procesor odpoví signálem na vodiči BG4 až BG7. Tyto vodiče nejsou společné, ale jsou zřetězeny (Daisy chain): Každé zařízení na sběrnici obsahuje hradlo a vstup každého hradla je propojen s výstupem předchozího hradla v řetězu. Zařízení fyzicky blíže k procesoru je v řetězu dříve. Jestliže zařízení poslalo požadavek, pak sledováním vstupu BGn zjistí, zda je první při vyvolání přerušení a nepředá signál BGn dalšímu zařízení v řetězu. Jestliže zařízení požadavek nevyvolalo, přenáší svůj vstup BGn na výstup BGn, což dovoluje, aby odpovědělo další zařízení. Pokud zařízení nezabírají sousedící sloty na desce procesoru, vkládají se do prázdných slotů „grant continuity cards“, které zajišťovaly přenos signálu BGn.

Jakmile je zařízení vyhověno, zařízení deaktivuje svůj signál přerušení a na sběrnici pošle paměťovou adresu svého přerušovacího vektoru. Procesor uloží obsah programového čítače (PC) na zásobník a naplní PC a PSW novými hodnotami ze zadaného vektoru. Pro zařízení na BR6, nový PSW ve svém vektoru typicky udává 6 jako novou prioritu procesoru, takže procesor při provádění obslužné funkce bude reagovat jen na urgentnější požadavky (BR7), a požadavky se stejnou nebo nižší prioritou odkládá. Nová hodnota PC způsobí skok do obslužné funkce pro zařízení, které přerušení vyvolalo. Tato funkce obslouží zařízení, přinejmenším odstraní podmínku, která přerušení způsobila. Funkce končí instrukcí RTI (ReTurn from Interrupt), která obnoví PC a PSW do stavu před vyvoláním přerušení.

Jestliže požadavek na přerušení byl chybný, a žádné zařízení na signál BGn neodpovědělo, bude po prodlevě vyvolán trap, který svědčí o chybě hardwaru.

Assembler MACRO-11

Děrná páska používaná na PDP-11

MACRO-11 je assembler pro PDP-11, který je následníkem staršího assembleru PAL-11 (Program Assembler Loader), který nepodporoval makra. MACRO-11 je podporován ve všech operačních systémech pro DEC PDP-11. Unixové systémy pro PDP-11 obsahují také assembler (nazývaný as), strukturně podobný MACRO-11, ale s jinou syntaxí a méně vlastnostmi.

PDP-11 folklór

Podle (nepravdivého) lidového mýtu architektura instrukční sady PDP-11 měla vliv na idiomatické použití programovacího jazyka B. Adresovací režimy inkrement a dekrement počítačů PDP-11 odpovídají konstrukcím −−i a i++ v jazyce C. Kdyby i a j byly registrové proměnné, výrazy jako *(−−i) = *(j++) by mohly být přeloženy jednou strojovou instrukcí. Dennis Ritchie tento lidový mýtus jednoznačně zamítá a uvádí, že v době, kdy jazyk B vznikl, počítače PDP-11 ještě neexistovaly; připouští však, že tyto režimy adresování mohly být inspirovány autoinkrementem buňky na počítači PDP-7, i když implementace v jazyce B tuto hardwarovou vlastnost nevyužívala[4]. Programovací jazyk C však využíval několik nízkoúrovňových vlastností PDP-11, což vedlo k implementaci těchto vlastností i v novějších procesorech[5].

Odkazy

Reference

V tomto článku byl použit překlad textu z článku PDP-11 architecture na anglické Wikipedii.

  1. pdp11/05/10/35/40, Chapter 7.
  2. pdp11/04/34a/44/60/70, stránka 421.
  3. DEC PDP-11/70 Processor Handbook, 1975, Appendix C, Instruction Timing
  4. Dennis M. Ritchie. The Development of the C Language. ACM SIGPLAN Notices. March 1993. Dostupné v archivu pořízeném dne 2013-06-22. DOI 10.1145/155360.155580.  Archivováno 23. 5. 2013 na Wayback Machine.
  5. Bakyo, John. "DEC PDP-11, benchmark for the first 16/32 bit generation. (1970)" v publikaci Great Microprocessors of the Past and Present (V 13.4.0), Section Three, Part I. Accessed 2011-03-04
  • pdp11 processor handbook - pdp11/05/10/35/40. [s.l.]: Digital Equipment Corporation, 1973. 
  • pdp11 processor handbook - pdp11/04/34a/44/60/70. [s.l.]: Digital Equipment Corporation, 1979. 

Literatura

  • ECKHOUSE, JR., Richard H.; MORRIS, L. Robert. Microcomputer Systems Organization, Programming and Applications (PDP-11). Englewood Cliffs, New Jersey: Prentice-Hall, 1979. Dostupné online. ISBN 0-13-583914-9. 
  • Michael Singer, PDP-11. Assembler Language Programming and Machine Organization, John Wiley & Sons, NY: 1980.

Externí odkazy

Média použitá na této stránce

Papertape.jpg
Autor: unknown, Licence: CC BY-SA 3.0