Architektura PDP-11 - PDP-11 architecture
The Architektura PDP-11[1] je architektura sady instrukcí (ISA) vyvinutý společností Digital Equipment Corporation (DEC). Je implementován centrální procesorové jednotky (CPU) a mikroprocesory použito v PDP-11 minipočítače. Během sedmdesátých let se široce využívalo, ale nakonec byl zastíněn mocnějšími VAX-11 architektura v 80. letech.
Paměť
Datové formáty
Šestnáctbitová slova jsou uložena malý Endian (s nejméně významným bajtů za prvé). Třicet dvoubitových dat - podporováno jako rozšíření základní architektury, např. plovoucí bod v Sada instrukcí FPU, dvojitá slova v Rozšířená instrukční sada nebo dlouhá data v Sada komerčních pokynů—Jsou uloženy ve více než jednom formátu, včetně neobvyklého střední endian formát[2][3] někdy označované jako „PDP-endian“.
Správa paměti
16bitové adresy PDP-11 mohou adresovat 64KB. V době, kdy se PDP-11 vzdal VAX, se v oboru staly standardem 8bitové bajty a hexadecimální zápis; číselné hodnoty na PDP-11 však vždy používají osmičkovou notaci a množství paměti připojené k PDP-11 je vždy uvedeno jako počet slov. Základní logická adresa prostor je 32 tis. slov, ale vysoké 4K prostoru fyzických adres (adresy 1600008 přes 1777778 při absenci správy paměti) nejsou naplněna, protože vstupní / výstupní registry na sběrnici reagují na adresy v tomto rozsahu. Původně tedy plně naložený PDP-11 měl 28 tisíc slov.
Procesor si vyhrazuje nízké adresy paměti pro dvouslovné vektory, které dávají čítač programu a stavové slovo procesoru, se kterými zahájí servisní rutinu. Když I / O zařízení přeruší program, umístí adresu svého vektoru na sběrnici, aby určilo, která servisní rutina by měla převzít kontrolu. Nejnižší vektory jsou servisní rutiny pro zpracování různých typů trapů. Při některých chybách programu, například při pokusu o provedení nedefinované instrukce, se vyskytnou pasti; a také když program provede instrukci jako BPT, EMT, IOT nebo TRAP k vyžádání služby z operačního systému.
Rozšíření paměti
Článek PDP-11 popisuje, jak se 16bitový prostor logických adres stal nepřekonatelným omezením. Během života PDP-11 byly k obcházení omezení použity následující techniky:
- Procesory PDP-11 novějšího modelu zahrnovaly podporu správy paměti virtuální adresování. Prostor fyzické adresy byl rozšířen na 18 nebo 22 bitů, což umožnilo až 256 KB nebo 4 MB RAM. Logický adresní prostor (tj. Adresní prostor dostupný kdykoli bez změny tabulky mapování paměti) zůstal omezen na 16 bitů.
- Některé modely, počínaje PDP-11/45, lze nastavit tak, aby používaly 32 kB slov (64 kB) jako „instrukční prostor“ pro programový kód a samostatná 32 kB slova „datového prostoru“. Některé operační systémy - zejména Unix od vydání V7 a RSX11-M + - spoléhají na tuto funkci.
- Programovací techniky, jako např překrytí blok uložených pokynů nebo dat s jinými podle potřeby, může zakrýt problémy s stránkováním před aplikačním programátorem. Například Modula-2 kompilátor vytváří kód, pod kterým běhový systém zamění 8 kB stránek do paměti, když jednotlivé procedury dostanou kontrolu. (Viz externí odkaz tady.)
Registry CPU
DEC PDP-11 registry | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
CPU obsahuje osm 16bitových univerzálních procesorů registry (R0 až R7). Registr R7 je počítadlo programů (PC). Ačkoli jakýkoli registr lze použít jako ukazatel zásobníku, R6 je ukazatel zásobníku (SP) používaný pro hardwarová přerušení a depeše. R5 se často používá k ukázání na aktuální rámec volání procedury. Aby se urychlilo přepínání kontextu, některé modely PDP-11 poskytují duální sady registrů R1-R5. Režimy Kernel, Supervisor (pokud jsou k dispozici) a User mají samostatné mapy paměti a také samostatné ukazatele zásobníku (takže uživatelský program nemůže způsobit nefunkčnost systému uložením neplatné hodnoty do registru ukazatele zásobníku).
Režimy adresování
Většina pokynů přiděluje šest bitů k určení operandu. Tři bity vybírají jeden z osmi režimů adresování a tři bity vybírají obecný registr.
Kódování šestibitového režimu adresování operandu je následující:
5 | 3 | 2 | 0 | ||
Režim | Registrovat |
V následujících částech obsahuje každá položka příklad toho, jak by byl operand napsán v montážním jazyce. Rn znamená jeden z osmi registrů, zapsaných R0 až R7.
Obecné režimy adresování registrů
Následující osm režimů lze použít na jakýkoli obecný registr. Jejich efekty při použití na R6 (ukazatel zásobníku, SP) a R7 (programové počítadlo, PC) jsou uvedeny samostatně v následujících částech.
Kód | název | Příklad | Popis |
---|---|---|---|
0n | Registrovat | Rn | Operand je v Rn |
1n | Registrace odložena | (Rn) | Rn obsahuje adresu operandu |
2n | Automatické zvyšování | (Rn) + | Rn obsahuje adresu operandu, poté zvyšuje Rn |
3n | Automatické zvyšování odloženo | @ (Rn) + | Rn obsahuje adresu adresy operandu, poté zvýší Rn o 2 |
4n | Autodecrement | - (Rn) | Snižte Rn, poté použijte výsledek jako adresu operandu |
5n | Autodecrement odloženo | @ - (Rn) | Snižte Rn o 2, poté použijte výsledek jako adresu adresy operandu |
6n | Index | X (Rn) | Rn + X je adresa operandu |
7n | Index odložen | @X (Rn) | Rn + X je adresa adresy operandu |
V režimech indexu a odloženého indexu je X 16bitová hodnota převzatá z druhého slova instrukce. V pokynech s dvojitým operandem mohou tyto režimy používat oba operandy. Tyto pokyny jsou dlouhé tři slova.
Automatické zvýšení a automatické operace v registru jsou o 1 v bajtových instrukcích, o 2 ve slovních pokynech a o 2, kdykoli se použije odložený režim, protože množství adres v registru je ukazatel (slovo).
Programujte režimy adresování čítače
Když je zadán R7 (čítač programu), čtyři z režimů adresování přirozeně přinášejí užitečné efekty:
Kód | název | Příklad | Popis |
---|---|---|---|
27 | Bezprostřední | #n | Operand je dalším slovem instrukce |
37 | Absolutní | @#A | Adresa operandu je dalším slovem instrukce |
67 | Relativní | A | Adresa operandu je další slovo instrukce přidané do PC |
77 | Relativně odloženo | @A | Adresa adresy operandu je další slovo instrukce přidané do PC |
Jediným běžným použitím absolutního režimu, jehož syntaxe kombinuje okamžitý a odložený režim, je určení vstupních / výstupních registrů, protože registry pro každé zařízení mají konkrétní adresy paměti. Relativní režim má jednodušší syntaxi a je typičtější pro odkazování na programové proměnné a cíle skoků. Program, který používá relativní režim (a relativní odložený režim) výhradně pro interní odkazy, je nezávislý na poloze; neobsahuje žádné předpoklady o svém vlastním umístění, takže jej lze načíst do libovolného umístění v paměti nebo dokonce přesunout, aniž by bylo nutné upravit jeho adresy tak, aby odrážely jeho umístění (přemístěn ). Při výpočtu těchto adres vzhledem k aktuálnímu umístění provedl procesor relokaci za běhu.
Okamžitý a absolutní režim jsou pouze automatický přírůstek a automatický přírůstek odložený režim, respektive aplikovaný na PC. Když je pomocné slovo „v instrukci“, jak říká výše uvedená tabulka, počítač pro další instrukci se automaticky zvýší za pomocné slovo. Protože PC vždy ukazuje na slova, operace automatického zvyšování je vždy o 2.
Režimy adresování zásobníku
R6, také psaný SP, se používá jako hardware stack pro pasti a přerušení. Konvence vynucená sadou režimů, které PDP-11 poskytuje, spočívá v tom, že hromádka roste směrem dolů - směrem k nižším adresám - jak jsou na něj tlačeny položky. Když je režim použit na SP nebo na jakýkoli registr, který si programátor zvolí jako softwarový zásobník, mají režimy adresování následující účinky:
Kód | název | Příklad | Popis |
---|---|---|---|
16 | Odložený | (SP) | Operand je v horní části zásobníku |
26 | Automatické zvyšování | (SP) + | Operand je v horní části zásobníku, poté jej vysuňte |
36 | Automatické zvyšování odloženo | @ (SP) + | Ukazatel na operand je na vrcholu zásobníku; vypněte ukazatel |
46 | Autodecrement | - (SP) | Zatlačte hodnotu do zásobníku |
66 | Indexováno | X (SP) | To se týká jakékoli položky v zásobníku podle její kladné vzdálenosti od vrcholu |
76 | Indexováno odloženo | @X (SP) | To se týká hodnoty, na kterou je ukazatel na zadaném místě v zásobníku |
Ačkoli softwarové sady mohou obsahovat bajty, SP je vždy hromada slov. Automatické zvyšování a automatické zvyšování operací v SP je vždy o 2.
Sada instrukcí
PDP-11 pracuje na bajtech a slovech. Bajty jsou specifikovány číslem registru - identifikujícím bajt nízkého řádu registru - nebo paměťovým místem. Slova jsou specifikována číslem registru nebo paměťovým místem bajtu nižšího řádu, což musí být sudé číslo. Ve většině instrukcí, které berou operandy, je bit 15 nastaven tak, aby určoval adresování bajtů, nebo clear, aby určoval adresování slov. V seznamech v následujících dvou částech programátor v assembleru připojil B k symbolu instrukce, aby určil bajtovou operaci; například MOV se stal MOVB.
Několik pokynů, například MARK a SOB, nebylo na některých modelech PDP-11 implementováno.
Pokyny pro dvojitý operand
Čtyři bity vyššího řádu specifikují operaci, která má být provedena (s bitem 15 obecně vybírá adresování slova versus bajt). Dvě skupiny šesti bitů určují režim adresování zdrojového operandu a režim adresování cílového operandu, jak je definováno výše.
15 | 12 | 11 | 9 | 8 | 6 | 5 | 3 | 2 | 0 | ||||||
Operační kód | Src | Registrovat | Dest | Registrovat |
Operační kód | Mnemotechnická pomůcka | Úkon |
---|---|---|
01 | MOV | Hýbat se: Dest ← Src Poznámka: Přesunutí bajtu do znaménka registru se rozšíří na bity 8-15 |
11 | MOVB | |
02 | CMP | Porovnat: Set-flags (Src - Dest) |
12 | CMPB | |
03 | BIT | Bitový test: Nastavené příznaky (Src ∧ Dest) |
13 | BITB | |
04 | BIC | Trochu jasné: Dest ← Dest ∧ Jeden doplněk (Src) |
14 | BICB | |
05 | BIS | Sada bitů: Dest ← Dest ∨ Src |
15 | BISB | |
06 | PŘIDAT | Přidat: Dest ← Dest + Src |
16 | SUB | Odčítat: Dest ← Dest - Src |
Pokyny ADD a SUB používají adresování slov a nemají žádné varianty orientované na bajty.
Některé instrukce se dvěma operandy využívají operand režimu adresování a další operand registru:
15 | 9 | 8 | 6 | 5 | 3 | 2 | 0 | ||||||||
Operační kód | Reg | Src / Dest | Registrovat |
Pokud je použit pár registrů (zapsán níže jako „(Reg, Reg + 1)“), první registr obsahuje část operandu nižšího řádu a musí to být sudý registr. Další registr s vyšším číslem obsahuje vyšší řád část operandu (nebo zbytek). Výjimkou je instrukce násobení; Reg může být lichý, ale pokud ano, vysokých 16 bitů výsledku se neuloží.
Operační kód | Mnemotechnická pomůcka | Úkon |
---|---|---|
070 | MUL | Násobit: (Reg, Reg + 1) ← Reg × Src |
071 | DIV | Rozdělit: Compute (Reg, Reg + 1) ÷ Src; Reg ← kvocient; Reg + 1 ← zbytek |
072 | POPEL | Aritmetický posun: pokud Src <5: 0> <0, pak Reg ← Shift-vpravo (Reg, -Src <5: 0>) jinak Reg ← Shift-vlevo (Reg, Src <5: 0>) |
073 | ASHC | Kombinovaný aritmetický posun: if Src <5: 0> <0 then (Reg, Reg + 1) ← Shift-right ((Reg, Reg + 1), -Src <5: 0>)
|
074 | XOR | Exkluzivní nebo: Dest ← Dest ⊻ Reg |
Pokyny pro jeden operand
Deset bitů vysokého řádu specifikuje operaci, která má být provedena, přičemž bit 15 obecně vybírá adresování bajtu versus slovo. Jedna skupina šesti bitů určuje operand, jak je definováno výše.
15 | 6 | 5 | 3 | 2 | 0 | ||||||||||
Operační kód | Src / Dest | Registrovat |
Operační kód | Mnemotechnická pomůcka | Úkon |
---|---|---|
0001 | JMP | Skok: PC ← Src |
0003 | TAMPON | Vyměnit bajty slova: Dest ← Vyměnit bajty (Dest) |
0050 | CLR | Průhledná: Dest ← 0 |
1050 | CLRB | |
0051 | KOM | Doplněk: Dest ← Jeden doplněk (Dest) |
1051 | HŘEBEN | |
0052 | INC | Přírůstek: Dest ← Dest + 1 |
1052 | INCB | |
0053 | DEC | Úbytek: Dest ← Dest - 1 |
1053 | DECB | |
0054 | NEG | Negovat: Dest ← Dvojitý doplněk (Dest) |
1054 | NEGB | |
0055 | ADC | Přidat přenos: Dest ← Dest + C vlajka |
1055 | ADCB | |
0056 | SBC | Odečíst: Dest ← Vlajka Dest - C. |
1056 | SBCB | |
0057 | TST | Test: Set-vlajky (Src) |
1057 | TSTB | |
0060 | ROR | Otočit doprava: Dest ← Otočit doprava (Dest, 1) |
1060 | RORB | |
0061 | ROL | Otočit doleva: Dest ← Otočit doleva (Dest, 1) |
1061 | ROLB | |
0062 | ASR | Aritmetický posun doprava: Dest ← Shift vpravo (Dest, 1) |
1062 | ASRB | |
0063 | ASL | Aritmetický posun doleva: Dest ← Shift-left (Dest, 1) |
1063 | ASLB | |
1064 | MTPS | Přejít na PSW: PSW ← Src |
0065 | MFPI | Přesunout z předchozího I prostoru: - (SP) ← Src |
1065 | MFPD | Přesunout z předchozího D prostoru: - (SP) ← Src |
0066 | MTPI | Přejít na předchozí I prostor: Dest ← (SP) + |
1066 | MTPD | Přejít na předchozí D prostor: Dest ← (SP) + |
0067 | SXT | Prodloužení znaménka: pokud N příznak ≠ 0, pak Dest ← -1 jiný Dest ← 0 |
1067 | MFPS | Přechod z PSW: Dest ← PSW |
Pokyny pobočky
Ve většině pokynů větvení je to, zda je větev přijata, založeno na stavu stavových kódů. Větvové instrukci obvykle předchází instrukce CMP (porovnání) nebo BIT (bitový test) se dvěma operandy nebo instrukce TST (test) s jedním operandem. Aritmetické a logické pokyny také nastavují kódy podmínek. Na rozdíl od Intel zpracovatelé v architektura x86, Nastavily je také instrukce MOV, takže větvicí instrukci lze použít k větvení podle toho, zda byla posunutá hodnota nulová nebo záporná.
Bajt vyššího řádu instrukce určuje operaci. Bity 9 až 15 jsou operační kód a bit 8 je hodnota výpočtu podmínkového kódu, která vede k převzetí větve. Bajt nízkého řádu je offset podepsaného slova vzhledem k aktuálnímu umístění čítače programu. To umožňuje vpřed a vzad větve v kódu.
15 | 9 | 8 | 7 | 0 | |||||||||||
Operační kód | C | Ofset |
Operační kód | C | Mnemotechnická pomůcka | Stav nebo provoz |
---|---|---|---|
000 | 1 | BR | Pobočka vždy PC ← PC + 2 × prodloužení znaménka (ofset) |
001 | 0 | BNE | Větev, pokud není stejná Z = 0 |
001 | 1 | BEQ | Větev, pokud je stejná Z = 1 |
002 | 0 | BGE | Větev, pokud je větší nebo rovna (N ⊻ V) = 0 |
002 | 1 | BLT | Pobočka, pokud je menší než (N ⊻ V) = 1 |
003 | 0 | BGT | Větev, pokud je větší než (Z ∨ (N ⊻ V)) = 0 |
003 | 1 | BLE | Větev, pokud je menší nebo rovna (Z ∨ (N ⊻ V)) = 1 |
100 | 0 | BPL | Pobočka, pokud plus N = 0 |
100 | 1 | BMI | Pobočka, pokud je minus N = 1 |
101 | 0 | BHI | Větve, pokud je vyšší (C ∨ Z) = 0 |
101 | 1 | BLOS | Větev, pokud je nižší nebo stejná (C ∨ Z) = 1 |
102 | 0 | BVC | Větev, pokud je přetečení jasné V = 0 |
102 | 1 | BVS | Větev, pokud je nastaven přepad V = 1 |
103 | 0 | BCC nebo BHIS | Větev, pokud je nesena jasně, nebo Větev, pokud je vyšší nebo stejná C = 0 |
103 | 1 | BCS nebo BLO | Větev, pokud je sada na přenášení, nebo Větev, pokud je nižší C = 1 |
Omezený rozsah instrukcí větve znamenal, že s růstem kódu se cílové adresy některých větví staly nedostupnými. Programátor by změnil jednoslovnou BR na dvouslovnou instrukci JMP z další skupiny. Protože JMP nemá žádné podmíněné formy, programátor by změnil BEQ na BNE, které se rozvětvilo kolem JMP.
SOB (Subtract One and Branch) je další podmíněná instrukce větvení. Zadaný registr se sníží o 1, a pokud výsledek není nula, provede se reverzní větev založená na 6bitovém posunu slova.
15 | 9 | 8 | 6 | 5 | 0 | ||||||||||
Operační kód | Reg | Ofset |
Operační kód | Mnemotechnická pomůcka | Úkon |
---|---|---|
077 | VZLYK | Odečíst jednu a větev: Reg ← Reg - 1; pokud Reg ≠ 0 pak PC ← PC - 2 × Offset |
Pokyny k podprogramu
Instrukce JSR mohla uložit jakýkoli registr na zásobníku. Programy, které tuto funkci nepotřebovaly, zadaly PC jako registr (PC JSR, adresa) a rutina se vrátila pomocí RTS PC. Pokud by byla rutina volána například s „JSR R4, adresa“, pak by byla stará hodnota R4 v horní části zásobníku a zpáteční adresa (hned za JSR) by byla v R4. To umožňuje rutině získat přístup k hodnotám kódovaným in-line zadáním (R4) +, nebo k in-line ukazatelům zadáním @ (R4) +. Automatická inkrementace se přesunula kolem těchto dat do bodu, ve kterém se obnovil kód volajícího. Taková rutina by musela specifikovat RTS R4, aby se vrátila svému volajícímu.
15 | 9 | 8 | 6 | 5 | 3 | 2 | 0 | ||||||||
Operační kód | Reg | Src | Registrovat |
Operační kód | Mnemotechnická pomůcka | Úkon |
---|---|---|
004 | JSR | Přejít na podprogram: - (SP) ← Reg; Reg ← PC; PC ← Src |
15 | 3 | 2 | 0 | ||||||||||||
Operační kód | Reg |
Operační kód | Mnemotechnická pomůcka | Úkon |
---|---|---|
00020 | RTS | Návrat z podprogramu: PC ← Reg; Reg ← (SP) + |
Pokyny k pasti
15 | 9 | 8 | 7 | 0 | |||||||||||
Operační kód | S | Provozní kód |
Operační kód | S | Mnemotechnická pomůcka | Úkon |
---|---|---|---|
104 | 0 | EMT | Emulátorová past: - (SP) ← PS; - (SP) ← PC; PC ← (30); PS ← (32) |
104 | 1 | PAST | Obecná past: - (SP) ← PS; - (SP) ← PC; PC ← (34); PS ← (36) |
15 | 0 | ||||||||||||||
Operační kód |
Operační kód | Mnemotechnická pomůcka | Úkon |
---|---|---|
000002 | RTI | Návrat z přerušení: PC ← (SP) +; PS ← (SP) + |
000003 | BPT | Trap zlomu: - (SP) ← PS; - (SP) ← PC; PC ← (14); PS ← (16) |
000004 | IOT | Trapéz I / O: - (SP) ← PS; - (SP) ← PC; PC ← (20); PS ← (22) |
000006 | RTT | Návrat z pasti: PC ← (SP) +; PS ← (SP) + |
Přiřazení vektorových adres do trapů a výjimek
Vektor | Stav |
---|---|
000000 | (Rezervováno) |
000004 | Neplatná instrukce, chyba sběrnice, limit zásobníku |
000010 | Rezervovaná instrukce |
000014 | Instrukce BPT, sledovací past |
000020 | Instrukce IOT |
000030 | Instrukce EMT |
000034 | TRAP instrukce |
000244 | Výjimka s plovoucí desetinnou čárkou |
000250 | Chyba správy paměti |
Různé pokyny
15 | 0 | ||||||||||||||
Operační kód |
Operační kód | Mnemotechnická pomůcka | Úkon |
---|---|---|
000000 | STŮJ | Zastavit procesor: Zastavit provádění před další instrukcí |
000001 | POČKEJTE | Počkejte na přerušení: Zastavit provádění před další instrukcí; Pokračovat v provádění na další obslužné rutině přerušení |
000005 | RESETOVAT | Resetovat UNIBUS: Assert INIT on UNIBUS for 10 ms; Všechna ostatní zařízení se resetují do stavu zapnutí |
Operace podmíněného kódu
15 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||||||
Operační kód | 1 | S | N | Z | PROTI | C |
Operační kód | S | Mnemotechnická pomůcka | Úkon |
---|---|---|---|
0002 | 0 | Ccc | Vymazat kódy stavu: Vymažte kódy podle bitů N, Z, V, C. |
0002 | 1 | Scc | Nastavení stavových kódů: Nastavte kódy podle bitů N, Z, V, C. |
Čtyři stavové kódy ve stavovém slově procesoru (PSW) jsou
- N označující zápornou hodnotu
- Z označující nulovou (stejnou) podmínku
- V označující podmínku přetečení a
- C označující stav nošení.
Pokyny v této skupině byly tím, co Digital nazýval „mikroprogramem“: Jeden bit ve slově instrukce odkazoval na jeden podmínkový kód. Assembler nedefinoval syntaxi k určení každé kombinace, ale symboly SCC a CCC sestavily instrukci, která nastavila nebo vymazala všechny čtyři kódy podmínek.
Vymazání nebo nastavení žádného z stavových kódů (operační kódy 000240, resp. 000260) lze účinně považovat za pokyny bez provozu. Ve skutečnosti se mnemotechnika NOP sestavila do 000240.
Volitelné sady instrukcí
- Rozšířená instrukční sada (EIS)
EIS byl volbou pro 11/35/40 a 11/03 a byl standardem pro novější procesory.
- MUL, DIV násobí a dělí celočíselný operand na registraci dvojice
- ASH, ASHC aritmetika - posune registr nebo pár registrů. U kladného čísla se posune doleva a doprava o záporné číslo.
- Plovoucí instrukční sada (FIS)
Sada instrukcí FIS byla doplňkem pro PDP-11/35/40 a 11/03
- FADD, FSUB, FMUL, FDIV pouze pro operace s jednou přesností na zásobníku adresovaném operandem registru
- Procesor s plovoucí desetinnou čárkou (FPP)
Jednalo se o volitelnou možnost procesoru s plovoucí desetinnou čárkou pro 11/45 a většinu následných modelů.
- operace s plnou plovoucí desetinnou čárkou na operandech s jednoduchou nebo dvojitou přesností, vybrané jedním / dvojitým bitem ve stavovém registru s plovoucí desetinnou čárkou
- předchůdce datového formátu s plovoucí desetinnou čárkou s jednou přesností IEEE 754 formát: signální bit, 8bitový exponent, 23bitová mantisa se skrytým bitem 24
- Sada komerčních pokynů (CIS)
CIS byl implementován volitelným mikrokódem v 11/23/24 a přídavným modulem v 11/44 a v jedné verzi 11/74. Poskytoval řetězce a desetinná místa, která používá COBOL a Dibol.
- Přístup ke stavovému slovu procesoru (PSW)
PSW byl namapován na adresu paměti 177 776, ale pokyny nalezené na všech PDP-11 kromě prvních dávaly programům přímější přístup do registru.
- SPL (nastavená úroveň priority)
- MTPS (přejít do stavu procesoru)
- MFPS (přechod ze stavu procesoru)
- Přístup do dalších paměťových prostor
Na PDP-11, které poskytovaly více prostorů instrukcí a datových prostorů, poskytla sada neortogonálních instrukcí Move přístup do dalších prostorů. Například rutiny v operačním systému, které zpracovávaly volání služby za běhu, by pomocí těchto pokynů vyměňovaly informace s volajícím.
- MTPD (přechod na předchozí datový prostor)
- MTPI (přechod na předchozí prostor instrukcí)
- MFPD (přesun z předchozího datového prostoru)
- MFPI (přesun z předchozího prostoru instrukcí)
Nekonzistentní pokyny
V průběhu životnosti PDP-11 vznikly jemné rozdíly v implementaci instrukcí a kombinací režimů adresování, ačkoli žádná implementace nebyla považována za správnou. Nesrovnalosti neměly vliv na běžné používání PDP-11.
Rychlost
Rychlost procesoru PDP-11 se liší podle modelu, konfigurace paměti, operačního kódu a režimů adresování. Načasování instrukce mělo až tři komponenty, provedení / načtení samotné instrukce a čas přístupu pro zdroj a cíl. Poslední dvě komponenty závisely na režimu adresování. Například na PDP-11/70 (cca 1975) instrukce ve tvaru PŘIDATX(R.m),y(R.n) měl čas načtení / provedení 1,35 mikrosekundy plus čas zdroje a cíle po 0,6 mikrosekundě, pro celkovou dobu instrukce 2,55 mikrosekundy. Jakýkoli případ, kdy adresovaná paměť nebyla v mezipaměti, přidal 1,02 mikrosekundy. Registr k registraci ADD R.m, R.n mohl spustit z mezipaměti za 0,3 mikrosekundy. Plovoucí desetinná čárka byla ještě složitější, protože došlo k určitému překrytí mezi CPU a procesorem s plovoucí desetinnou čárkou, ale obecně byla plovoucí čárka výrazně pomalejší. Instrukce s plovoucím přidáním s jednou přesností se může pohybovat od 2,4 do 5,5 mikrosekund plus čas na načtení operandů.[4]
Přerušení
PDP-11 pracoval na prioritní úrovni od 0 do 7, deklarované třemi bity v Stavové slovo procesoru (PSW) a high-end modely mohly fungovat v několika režimech, jádro (privilegované), uživatel (aplikace) a někdy i supervizor, podle dvou bitů v PSW.
Chcete-li požádat o přerušení, zařízení sběrnice bude prosazovat jednu ze čtyř společných linek sběrnice BR4 až BR7, dokud procesor neodpoví. Vyšší čísla naznačovala větší naléhavost, možná že by mohlo dojít ke ztrátě dat nebo by se požadovaný sektor mohl otáčet mimo kontakt s čtecími / zapisovacími hlavami, pokud procesor nereagoval rychle. Připravenost tiskárny na další znak měla nejnižší prioritu (BR4), protože by zůstala připravena na neurčito. Pokud by procesor pracoval na úrovni 5, pak by byly BR6 a BR7 v pořádku. Pokud procesor pracoval na 3 nebo nižší, poskytl by jakékoli přerušení; pokud v 7, neposkytl by žádný. Žádosti o autobus, které nebyly schváleny, nebyly ztraceny, pouze odloženy. Zařízení vyžadující službu bude i nadále prosazovat svůj požadavek na sběrnici.
Kdykoli přerušení překročilo úroveň priority procesoru, procesor uplatnil odpovídající přidělení sběrnice, BG4 až BG7. Autobusové linky nebyly běžné linky, ale byly sedmikráska řetěz: Vstupem každé brány byl výstup předchozí brány v řetězci. Na každém sběrnicovém zařízení byla brána a zařízení fyzicky blíže k procesoru bylo dříve v řetězci. Pokud zařízení zadalo požadavek, mohlo by při snímání vstupu vstupu sběrnice dojít k závěru, že má kontrolu nad sběrnicí, a nepředalo signál povolení dalšímu zařízení na sběrnici. Pokud zařízení neprovedlo požadavek, rozšířilo svůj vstup sběrnicového grantu na svůj výstup sběrnicového grantu, čímž dalo dalšímu nejbližšímu zařízení šanci odpovědět. (Pokud zařízení neobsazovala přilehlé sloty k desce procesoru, „udělení spojitých karet“ vložených do prázdných slotů šířilo linku udělení sběrnice.)
Jakmile zařízení ovládlo sběrnici, zařízení zrušilo svůj požadavek na sběrnici a umístilo na sběrnici adresu paměti svého dvouslovného vektoru. Procesor uložil počítadlo programů (PC) a PSW, vstoupili do režimu jádra a načetli nové hodnoty ze zadaného vektoru. Pro zařízení v BR6 by nový PSW ve svém vektoru typicky specifikoval 6 jako novou prioritu procesoru, takže procesor by během servisní rutiny ctil naléhavější požadavky (BR7), ale odkládal požadavky stejné nebo nižší priority. S novým počítačem procesor skočil na servisní rutinu přerušujícího zařízení. Tato rutina obsluhovala zařízení, alespoň odstranila stav, který způsobil přerušení. Rutina skončila instrukcí RTI (ReTurn from Interrupt), která obnovila PC a PSW těsně předtím, než procesor povolil přerušení.
Pokud byl požadavek na sběrnici vytvořen omylem a žádné zařízení na sběrnici nereagovalo, procesor vypršel a provedl past, která by naznačovala špatný hardware.
Montážní jazyk MACRO-11

MAKRO-11 je montážní jazyk pro PDP-11. Je to nástupce PAL-11 (Program Assembler Loader), dřívější verze montážního jazyka PDP-11 bez funkcí maker. MACRO-11 byl podporován na všech operačních systémech DEC PDP-11. PDP-11 Unix systémy také zahrnují assembler (tzv.tak jako "), strukturálně podobný MACRO-11, ale s odlišnou syntaxí a méně funkcemi.
Mýtus o vlivu PDP-11 na programovací jazyky
Lidový mýtus je, že architektura instrukční sady PDP-11 ovlivnila idiomatické použití B programovací jazyk. Režimy adresování přírůstku a zmenšení PDP-11 odpovídají režimu −−i
a i ++
konstrukty v C. If i
a j
byly obě proměnné registru, výraz jako * (−− i) = * (j ++)
lze sestavit do jediné strojové instrukce. Dennis Ritchie říká, že tento lidový mýtus je historicky nemožný.[5] Nicméně Programovací jazyk C. využili výhod několika nízkoúrovňových programovacích funkcí PDP-11, což vedlo k jejich začlenění do nových procesorů.[6]
Poznámky
- ^ „Příručka k procesoru PDP-11“ (PDF). DEC. Citováno 13. listopadu 2015.
- ^ pdp11 / 05/10/35/40, kapitola 7.
- ^ pdp11 / 04 / 34a / 44/60/70, strana 421.
- ^ Příručka k procesoru DEC PDP-11/70, 1975, dodatek C, Načasování pokynů
- ^ Dennis M. Ritchie (Březen 1993). „Vývoj jazyka C“. Oznámení ACM SIGPLAN. 28 (3): 201–208. doi:10.1145/155360.155580.
Lidé často hádají, že byly vytvořeny pro použití režimů adres s automatickým přírůstkem a automatickým snižováním, které poskytuje DEC PDP-11, ve kterém se C a Unix poprvé staly populární. To je historicky nemožné, protože při vývoji B nebyl žádný PDP-11. PDP-7 však měl několik paměťových buněk s „automatickým přírůstkem“, přičemž vlastnost, že nepřímý odkaz na paměť skrze ně, buňku zvětšovala. Tato funkce pravděpodobně navrhla takové operátory Thompsonovi; zobecnění, aby byly jak prefixem, tak postfixem, bylo jeho vlastní. Buňky s automatickým přírůstkem nebyly skutečně použity přímo při implementaci operátorů a silnější motivací pro inovaci bylo pravděpodobně jeho pozorování, že překlad ++ x byl menší než překlad x = x + 1.
- ^ Bakyo, Johne. „DEC PDP-11, měřítko pro první 16/32 bitovou generaci. (1970)“ v Velké mikroprocesory minulosti a současnosti (V 13.4.0)„Oddíl třetí, část I. Zpřístupněno 4. 3. 2011
Reference
- Příručka k procesoru pdp11 - pdp11 / 05/10/35/40. Digital Equipment Corporation. 1973.
- Příručka k procesoru pdp11 - pdp11 / 04 / 34a / 44/60/70. Digital Equipment Corporation. 1979.
Další čtení
- Eckhouse, jr., Richard H .; Morris, L. Robert (1979). Organizace, programování a aplikace mikropočítačových systémů (PDP-11). Englewood Cliffs, New Jersey: Prentice-Hall. ISBN 0-13-583914-9.
- Michael Singer, PDP-11. Assembler Language Programming and Machine Organisation„John Wiley & Sons, NY: 1980.
externí odkazy
- Příručka k procesoru PDP-11 (Gordon Bell Vydání z roku 1969, Vydání 1979 u bitsavers )
- Zachování 16bitových minipočítačů řady PDP-11
- Gordon Bell a papír Billa Streckera z roku 1975, Co jsme se naučili z PDP-11
- Ersatz-11, emulátor PDP-11
- Další dokumenty a odkazy na Web Gordona Bella.
- Fuzzball
- Na LSI-11, RT-11, megabajtech paměti a Modula-2 / VRS autor: Günter Dotzel, ModulaWare.com - Článek o synergii překladače / linkeru Modula-2 k překonání omezení adresního prostoru PDP / LSI-11, publikovaný v DEC PROFESSIONAL, The Magazine for DEC Users, Professional Press, Spring House, PA. USA, leden 1986.