Počítač s jednou instrukcí - One-instruction set computer
A počítač s jednou instrukcí (OISC), někdy nazývaný jako Ultimátni počítač se sníženou instrukční sadou (URISC), je abstraktní stroj který používá pouze jednu instrukci - odstraňuje potřebu a jazyk stroje operační kód.[1][2][3] S uvážlivou volbou pro jedinou instrukci a vzhledem k nekonečným zdrojům je OISC schopen být univerzální počítač stejným způsobem jako tradiční počítače s více pokyny.[2]:55 OISC byly doporučeny jako pomůcky při výuce počítačové architektury[1]:327[2]:2 a byly použity jako výpočetní modely ve výzkumu strukturálních výpočtů.[3]
Architektura strojů
V Turingův kompletní model, každé paměťové místo může uložit libovolné celé číslo a - v závislosti na modelu[je zapotřebí objasnění ] - míst může být libovolně mnoho. Samotné pokyny jsou uloženy v paměti jako posloupnost takových celých čísel.
Existuje třída univerzální počítače s jedinou instrukcí založenou na bitové manipulaci jako např bitové kopírování nebo bitová inverze. Protože jejich paměťový model je konečný, stejně jako paměťová struktura používaná ve skutečných počítačích, jsou tyto bitové manipulační stroje ekvivalentní skutečným počítačům spíše než Turingovým strojům.[4]
V současnosti známé OISC lze zhruba rozdělit do tří širokých kategorií:
- Stroje pro manipulaci s bity
- Transportní stroje architektury
- Turingovy kompletní stroje založené na aritmetice
Stroje pro manipulaci s bity
Manipulace s bity stroje jsou nejjednodušší třídou.
BitBitJump
Bitový kopírovací stroj s názvem BitBitJump zkopíruje jeden bit do paměti a předá provedení bezpodmínečně na adresu určenou jedním z operandů instrukce. Ukázalo se, že tento proces je schopen univerzální výpočet (tj. schopnost vykonávat jakýkoli algoritmus a interpretovat jakýkoli jiný univerzální stroj), protože kopírování bitů může podmíněně upravit kód, který bude následně proveden.
Počítač Toga
Další stroj s názvem Počítač Toga, se trochu invertuje a předá provedení podmíněně v závislosti na výsledku inverze. Jedinečnou instrukcí je TOGA (a, b), což znamená TOGgle A Avětev do b pokud je výsledek přepínací operace pravdivý.
![]() | Tato sekce potřebuje expanzi. Můžete pomoci přidávat k tomu. (Prosinec 2016) |
Vícebitový kopírovací stroj
Podobně jako BitBitJump kopíruje vícebitový kopírovací stroj několik bitů současně. Problém výpočetní univerzálnost je v tomto případě vyřešeno uchováním předdefinovaných skokových tabulek v paměti.[je zapotřebí objasnění ][je zapotřebí objasnění ]
Architektura spuštěná transportem
Architektura spuštěná transportem (TTA) is a design in which computation is a side effect of data transport. Některé paměťové registry (spouštěcí porty) v běžném adresovém prostoru obvykle provádějí přiřazenou operaci, když na ně instrukce odkazuje. Například v OISC pomocí jediné instrukce kopírování z paměti do paměti se to provádí spuštěním portů, které při zápisu provádějí skoky aritmetického ukazatele a ukazatele instrukce.
Turingovy kompletní stroje založené na aritmetice
Aritmetické stroje Turing-complete používají aritmetickou operaci a podmíněný skok. Stejně jako dva předchozí univerzální počítače je i tato třída Turing-complete. Instrukce pracuje na celých číslech, což mohou být také adresy v paměti.
V současné době existuje několik známých OISC této třídy založených na různých aritmetických operacích:
- sčítání (addleq, přidat a větev, pokud less než nebo ekvual na nulu)[5]
- dekrement (DJN, dexkrementy a větev (jump) pokud nonzero)[6]
- přírůstek (P1eq, strlus 1 a větev, pokud ekvual na jinou hodnotu)[7]
- odčítání (subleq, subtrakt a větev, pokud less než nebo ekvual na nulu)[8][9]
- odčítání, pokud je to možné (aritmetický stroj)[je zapotřebí objasnění ][10]
Typy pokynů
Běžné možnosti pro jednu instrukci jsou:
- Odečíst a větvit, pokud je menší nebo roven nule
- Odečíst a větvit, pokud je záporné
- Odečtěte, pokud je kladná jiná větev
- V opačném případě odečtěte a přeskočte, pokud si půjčíte
- Hýbat se (používá se jako součást architektury spouštěné transportem)
- Odečíst a větvit, pokud není nula (SBNZ a, b, c, cíl)
- Cryptoleq (heterogenní šifrovaný a nezašifrovaný výpočet)
Pouze jeden těchto pokynů je použito v dané implementaci. Není tedy nutné, aby operační kód určoval, kterou instrukci provést; výběr instrukce je vlastní konstrukci stroje a OISC je obvykle pojmenován podle instrukce, kterou používá (např. SBN OISC,[2]:41 jazyk SUBLEQ,[3]:4 atd.). Každá z výše uvedených instrukcí může být použita ke konstrukci Turing-complete OISC.
Tento článek představuje pouze instrukce založené na odčítání mezi těmi, které nejsou aktivovány přenosem. Je však možné postavit Turingovy kompletní stroje pomocí instrukce založené na jiných aritmetických operacích, např. Sčítání. Například jedna varianta známá jako DLN (Decrement and jump if not zero) has only two operands and uses decrement as the base operation. Další informace najdete v odvozených jazycích Subleq [1].
Odečtěte a rozdělte, pokud se nerovná nule
The SBNZ a, b, c, d
instrukce („odečíst a větvit, pokud se nerovná nule") odečte obsah na adrese A z obsahu na adrese b, uloží výsledek na adresu C, a pak, pokud výsledek není 0, předá kontrolu na adresu d (je-li výsledek roven nule, postupuje k další instrukci v pořadí).[3]
Odečíst a větvit, pokud je menší nebo roven nule
The subleq instrukce („odečíst a větvit, pokud je menší nebo roven nule") odečte obsah na adrese A z obsahu na adrese b, uloží výsledek na adresu b, a pak, pokud výsledek není pozitivní, předá kontrolu na adresu C (pokud je výsledek kladný, provedení pokračuje k další instrukci v pořadí).[3]:4–7
subleq A, b, C ; Mem [b] = Mem [b] - Mem [a] ; if (Mem [b] ≤ 0) goto c
Podmíněné větvení lze potlačit nastavením třetího operandu, který se rovná adrese následující instrukce v pořadí. Pokud třetí operand není zapsán, je toto potlačení implikováno.
Varianta je také možná se dvěma operandy a interním akumulátor, kde se akumulátor odečte od paměťového místa určeného prvním operandem. Výsledek je uložen v akumulátoru i na paměťovém místě a druhý operand určuje adresu pobočky:
subleq2 A, b ; Mem [a] = Mem [a] - ACCUM ; ACCUM = Mem [a] ; if (Mem [a] ≤ 0) goto b
I když to na každou instrukci používá pouze dva (místo tří) operandů, k provedení různých logických operací je zapotřebí odpovídajících dalších instrukcí.
Souhrnné pokyny
Je možné syntetizovat mnoho typů pokynů vyššího řádu pouze pomocí subleq návod.[3]:9–10
Bezpodmínečná větev:
- JMP c
subleq Z, Z, C
Sčítání lze provést opakovaným odečtením bez podmíněného větvení; např. následující pokyny vedou k obsahu na místě A přidáván k obsahu na místě b:
- PŘIDAT a, b
subleq A, Z subleq Z, b subleq Z, Z
První instrukce odečte obsah na místě A z obsahu na místě Z (což je 0) a uloží výsledek (což je zápor obsahu na A) v místě Z. Druhá instrukce odečte tento výsledek od b, ukládání do b tento rozdíl (což je nyní součet obsahu původně na A a b); třetí instrukce obnoví hodnotu 0 až Z.
Podobně lze implementovat kopírovací instrukci; např. následující pokyny vedou k obsahu na místě b nahrazení obsahem na místě A, opět za předpokladu obsahu na místě Z udržuje se jako 0:
- MOV a, b
subleq b, b subleq A, Z subleq Z, b subleq Z, Z
Lze sestavit libovolný požadovaný aritmetický test. Například podmínku větvení-pokud-nula lze sestavit z následujících pokynů:
- BEQ b, c
subleq b, Z, L1 subleq Z, Z, VEN L1: subleq Z, Z subleq Z, b, C VEN: ...
Subleq2 lze také použít k syntéze pokynů vyššího řádu, i když obecně vyžaduje více operací pro daný úkol. Například k převrácení všech bitů v daném bajtu není potřeba méně než 10 pokynů subleq2:
- NE
subleq2 tmp ; tmp = 0 (tmp = dočasný registr) subleq2 tmp subleq2 minus_one ; acc = -1 subleq2 A ; a '= a + 1 subleq2 Z ; Z = - a - 1 subleq2 tmp ; tmp = a + 1 subleq2 A ; a '= 0 subleq2 tmp ; načíst tmp do acc subleq2 A ; a '= - a - 1 (= ~ a) subleq2 Z ; nastavte Z zpět na 0
Emulace
Následující program (napsaný v pseudo kód ) napodobuje provedení a subleq- na základě OISC:
int Paměť[], program_počítadlo, A, b, C program_počítadlo = 0 zatímco (program_počítadlo >= 0): A = Paměť[program_počítadlo] b = Paměť[program_počítadlo+1] C = Paměť[program_počítadlo+2] -li (A < 0 nebo b < 0): program_počítadlo = -1 jiný: Paměť[b] = Paměť[b] - Paměť[A] -li (Paměť[b] > 0): program_počítadlo += 3 jiný: program_počítadlo = C
Tento program to předpokládá Paměť[] je indexován pomocí nezáporné celá čísla. V důsledku toho pro a subleq instrukce (A, b, C), program interpretuje a <0, b <0, nebo provedená větev do c <0 jako stav zastavení. Podobné tlumočníky napsané v a subleq-založený jazyk (tj. auto-tlumočníci, které lze použít samočinně se měnící kód jak to umožňuje povaha subleq instrukce) naleznete v níže uvedených externích odkazech.
Sestavení
Tady je překladač volala Vyšší Subleq napsal Oleg Mazonka, do kterého se kompiluje zjednodušený program C. subleq kód.[11]
Odečíst a větvit, pokud je záporné
The subneg instrukce („odečíst a větvit, pokud je záporné"), také zvaný SBN, je definován podobně jako subleq:[2]:41,51–52
subneg A, b, C ; Mem [b] = Mem [b] - Mem [a] ; if (Mem [b] <0) goto c
Podmíněné větvení lze potlačit nastavením třetího operandu, který se rovná adrese následující instrukce v pořadí. Pokud třetí operand není zapsán, je toto potlačení implikováno.
Souhrnné pokyny
Je možné syntetizovat mnoho typů pokynů vyššího řádu pouze pomocí subneg návod. Pro zjednodušení je zde znázorněna pouze jedna syntetizovaná instrukce pro ilustraci rozdílu mezi subleq a subneg.
Bezpodmínečná větev:[2]:88–89
- JMP c
subneg POS, Z, C ... C: subneg Z, Z
kde Z a POS jsou umístění dříve nastavená tak, aby obsahovala 0 a kladné celé číslo;
Bezpodmínečné větvení je zajištěno, pouze pokud Z zpočátku obsahuje 0 (nebo hodnotu menší než celé číslo uložené v POS). K vyčištění je nutná následná instrukce Z po rozvětvení, za předpokladu, že obsah Z musí být udržována jako 0.
subneg4
Varianta je také možná se čtyřmi operandy - subneg4. Obrácení minuendu a subtrahendu usnadňuje implementaci v hardwaru. Nedestruktivní výsledek zjednodušuje syntetické pokyny.
subneg4 s, m, r, j ; subtrahend, minuend, result a jump adresy ; Mem [r] = Mem [m] - Mem [s] ; if (Mem [r] <0) goto j
Aritmetický stroj
Ve snaze učinit Turingův stroj intuitivnějším uvažuje Z. A. Melzac za úkol počítat s kladnými čísly. Stroj má nekonečné počítadlo, nekonečné množství čítačů (oblázky, měřicí tyčinky) zpočátku na zvláštním místě S. Stroj je schopen provést jednu operaci:
Vezměte z místa X tolik čítačů, kolik je v místě Y, a přeneste je do místa Z a pokračujte k další instrukci.
Pokud tato operace není možná, protože v Y není dostatek čítačů, pak počitadlo ponechte tak, jak je, a pokračujte instrukcí T.
Jedná se v zásadě o subneg, kde se test provádí spíše než po odečtení, aby byla všechna čísla pozitivní a napodobovala lidského operátora, který počítá na počítadle reálného světa.
příkaz X, Y, Z, T ; if (Mem [Y] ; Mem [Z] = Mem [Y] - Mem [X]
Po zadání několika programů: multiplikace, gcd, výpočet n-té prvočíslo, reprezentace v základně b libovolného čísla, seřazeného podle velikosti, Melzac výslovně ukazuje, jak simulovat libovolný Turingův stroj na svém aritmetickém stroji.
Zmínil, že lze snadno ukázat pomocí prvků rekurzivních funkcí, že každé číslo vypočítatelné na aritmetickém stroji je vypočítatelné. Důkaz o tom podal Lambek[12] na ekvivalentním stroji se dvěma instrukcemi: X + (přírůstek X) a X− else T (zmenšit X, pokud není prázdný, jinak skočit na T).
V opačném případě odečtěte a přeskočte, pokud si půjčíte
V zpět odečíst a přeskočit, pokud si půjčíte (RSSB) instrukce, akumulátor se odečte od místa v paměti a další instrukce se přeskočí, pokud došlo k výpůjčce (umístění v paměti bylo menší než akumulátor). Výsledek je uložen v akumulátoru i v paměti. The počítadlo programů je namapován na místo v paměti 0. Akumulátor je namapován na místo v paměti 1.[2]
Příklad
Nastavení x na hodnotu y mínus z:
# Nejprve přesuňte z do cílového umístění x. RSSB tepl # K vymazání požadované teploty jsou zapotřebí tři pokyny [viz poznámka 1] RSSB tepl RSSB tepl RSSB X # Dva pokyny clear acc, x, protože acc je již jasný RSSB X RSSB y # Načíst y do acc: žádná půjčka RSSB tepl # Store -y into acc, temp: always loan and skip RSSB tepl # Přeskočeno RSSB X # Uložte y do x, podle # Za druhé, proveďte operaci. RSSB tepl # K vymazání požadované teploty jsou zapotřebí tři pokyny RSSB tepl RSSB tepl RSSB z # Načíst z RSSB X # x = y - z [viz poznámka 2]
[Poznámka 1] Pokud je hodnota uložená v „temp“ zpočátku záporná hodnota a instrukce, která byla provedena přímo před první „temp RSSB“ v této rutině, je zapůjčena, pak budou pro fungování rutiny vyžadovány čtyři instrukce „temp RSSB“ .
[Poznámka 2] Pokud je hodnota uložená na „z“ původně záporná hodnota, bude přeskočena konečná hodnota „RSSB x“, a rutina tedy nebude fungovat.
Architektura spuštěná transportem
Architektura spuštěná transportem používá pouze hýbat se instrukce, proto se původně nazýval „pohybový stroj“. Tato instrukce přesune obsah jednoho paměťového umístění do jiného paměťového umístění v kombinaci s aktuálním obsahem nového umístění:[2]:42[13]
hýbat se A na b ; Mem [b]: = Mem [A] (+, -, *, /, ...) Mem [b]
někdy psáno jako:
A -> b ; Mem [b]: = Mem [A] (+, -, *, /, ...) Mem [b]
Prováděná operace je definována buňkou cílové paměti. Některé buňky se navíc specializují, jiné na násobení atd. Paměťové buňky tedy nejsou jednoduché úložiště, ale jsou spojeny s aritmetická logická jednotka (ALU) nastavení provést pouze jeden druh operace s aktuální hodnotou buňky. Některé buňky jsou regulační tok pokyny ke změně provádění programu pomocí skoků, podmíněné provedení, podprogramy, Jestliže pak jinak, pro smyčku, atd...
Byl vytvořen mikrokontrolér architektury spouštěný komerčním přenosem s názvem MAXQ, který skrývá zjevné nepohodlí OISC pomocí „mapy přenosu“, která představuje všechny možné cíle hýbat se instrukce.[14]
Cryptoleq

Cryptoleq[15] je jazyk skládající se z jedné instrukce, stejnojmenný, je schopen provádět univerzální výpočet na šifrovaných programech a je blízký příbuzný s Subleq. Cryptoleq pracuje na spojitých buňkách paměti pomocí přímého a nepřímého adresování a provádí dvě operace Ó1 a Ó2 na třech hodnotách A, B a C:
Cryptoleq a, b, c [b] = O1([a], [b]); IP = c, pokud O2[b] ≤ 0 IP = IP + 3, jinak
kde a, bac jsou adresovány instrukčním ukazatelem, IP, s hodnotou IP adresování a, IP + 1 bod b a IP + 2 až c.
V operacích Cryptoleq Ó1 a Ó2 jsou definovány takto:
Hlavní rozdíl oproti Subleq je ten, že v Subleq Ó1(x, y) jednoduše odečte y z X a Ó2(X) rovná se X. Cryptoleq je také homomorfní k Subleq, modulární inverze a násobení je homomorfní k odčítání a operaci Ó2 odpovídá testu Subleq, pokud byly hodnoty nezašifrované. Program napsaný v Subleq může běžet na stroji Cryptoleq, což znamená zpětnou kompatibilitu. Cryptoleq však implementuje plně homomorfní výpočty a protože model je schopen provádět násobení. Násobení na šifrované doméně je podporováno jedinečnou funkcí G, u které se předpokládá, že je obtížné zpětně analyzovat a umožňuje opětovné šifrování hodnoty založené na Ó2 úkon:
kde je znovu zašifrovaná hodnota y a je šifrovaná nula. X je zašifrovaná hodnota proměnné, ať je m, a rovná se .
Algoritmus násobení je založen na sčítání a odčítání, používá funkci G a nemá podmíněné skoky ani větve. Šifrování Cryptoleq je založeno na Kryptosystém Paillier.
Viz také
Reference
- ^ A b Mavaddat, F .; Parhami, B. (říjen 1988). „URISC: Ultimate Reduced Instruction Set Computer“ (PDF). Int'l J. Elektrotechnické vzdělávání. Manchester University Press. 25 (4): 327–334. doi:10.1177/002072098802500408. S2CID 61797084. Citováno 2010-10-04.Tento článek považuje „stroj s jedinou instrukcí se 3 adresami za vrchol v RISC designu (URISC)“. Bez zadání instrukce popisuje SBN OISC a přidružený montážní jazyk a zdůrazňuje, že se jedná o univerzální (tj., Turing-kompletní ) stroj, jehož jednoduchost je ideální pro použití ve třídě.
- ^ A b C d E F G h Gilreath, William F .; Laplante, Phillip A. (2003). Počítačová architektura: minimalistická perspektiva. Springer Science + Business Media. ISBN 978-1-4020-7416-5. Archivovány od originál dne 13. 6. 2009.Tato kniha, určená pro výzkumné pracovníky, inženýry počítačových systémů, výpočetní teoretiky a studenty, poskytuje důkladné prozkoumání různých OISC, včetně SBN a MOVE. Přisuzuje SBN W. L. van der Poelovi (1956).
- ^ A b C d E F Nürnberg, Peter J .; Wiil, Uffe K .; Hicks, David L. (září 2003), „Velká jednotná teorie strukturálních výpočtů“, Metainformatika: Mezinárodní sympozium, MIS 2003, Graz, Rakousko: Springer Science + Business Media, s. 1–16, ISBN 978-3-540-22010-7Tento výzkumný příspěvek se plně zaměřuje na SUBLEQ OISC a jeho přidružený montážní jazyk, používající název SUBLEQ pro „výuku i jakýkoli jazyk na ní založený“.
- ^ Oleg Mazonka, „Bit Copying: The Ultimate Computational Simplicity“ „Complex Systems Journal 2011, svazek 19, N3, s. 263–285
- ^ "Addleq". Esolang Wiki. Citováno 2017-09-16.
- ^ „DJN OISC“. Esolang Wiki. Citováno 2017-09-16.
- ^ „P1eq“. Esolang Wiki. Citováno 2017-09-16.
- ^ Mazonka, Oleg (říjen 2009). „SUBLEQ“. Archivovány od originál dne 29.06.2017. Citováno 2017-09-16.
- ^ „Subleq“. Esolang Wiki. Citováno 2017-09-16.
- ^ Z. A. Melzak (1961). „Neformální aritmetický přístup k vypočítatelnosti a výpočtu“. Kanadský matematický bulletin. 4 (3): 279–293. doi:10.4153 / CMB-1961-031-9.
- ^ Oleg Mazonka Jednoduchý víceprocesorový počítač založený na Subleq
- ^ J. Lambek (1961). "Jak naprogramovat nekonečné počítadlo". Kanadský matematický bulletin. 4 (3): 295–302. doi:10.4153 / CMB-1961-032-6.
- ^ Jones, Douglas W. (červen 1988). „The Ultimate RISC“. Zprávy počítačové architektury ACM SIGARCH. New York: ACM. 16 (3): 48–55. doi:10.1145/48675.48683. S2CID 9481528. Citováno 2010-10-04.„Omezené architektury instrukčních sad počítačových architektur přitahují od roku 1980 značný zájem. Konečná RISC architektura zde představená je extrémní, ale jednoduchá ilustrace takové architektury. Má pouze jednu instrukci, přesouvá paměť do paměti, přesto je užitečná.“
- ^ Catsoulis, John (2005), Navrhování vestavěného hardwaru (2. vyd.), O'Reilly Media, str. 327–333, ISBN 978-0-596-00755-3
- ^ Mazonka, Oleg; Tsoutsos, Nektarios Georgios; Maniatakos, Michail (2016), „Cryptoleq: Heterogenní abstraktní stroj pro šifrovaný a nešifrovaný výpočet“, Transakce IEEE týkající se forenzní a bezpečnostní informace, 11 (9): 2123–2138, doi:10.1109 / TIFS.2016.2569062, S2CID 261387
externí odkazy
- Subleq na esoterických programovacích jazycích wiki - tlumočníci, překladatelé, příklady a odvozené jazyky
- Reductio ad absurdum na Youtube Christopher Domas
- Laboratorní počítač subleq – FPGA implementace pomocí VHDL
- Muzeum retrocomputingu - SBN emulátor a ukázkové programy
- Laboratorní počítač SBN - implementováno s Řada 7400 integrované obvody
- RSSB na esoterických programovacích jazycích wiki - tlumočníci a příklady
- 32bitová implementace OISC Dr. Dobba - architektura spuštěná transportem (TTA) na FPGA použitím Verilog
- Úvod do architektury MAXQ - zahrnuje diagram mapy přenosu
- Emulátor OISC - grafická verze
- TrapCC (nedávné Intel x86 MMU jsou vlastně Turingovy kompletní OISC.)
- SBN simulátor - simulátor a design inspirovaný CARDboard Ilustrativní pomoc při výpočtu
- One-bit Computing at 60 Hertz - prostředník mezi počítačem a státní stroj
- Stroj NOR - informace o sestavení CPU pouze s jednou instrukcí
- Cryptoleq - Úložiště zdrojů Cryptoleq
- CAAMP - Počítačová architektura minimalistická perspektiva
- DawnOS - operační systém pro architekturu SUBLEQ