MMIX - MMIX
Návrhář | Donald Knuth |
---|---|
Bity | 64bitové |
Představeno | 1999 |
Design | RISC |
Kódování | Pevný |
Větvení | Kód podmínky |
Endianness | Velký |
Otevřeno | Ano, bez licenčních poplatků |
Registry | |
32 účelových registrů | |
Obecný účel | 256 |
MMIX (vyslovováno em-mix ) je 64bitová architektura RISC (Reduced Instruction Set Computing ) navržená Donaldem Knuthem , k níž významně přispěli John L. Hennessy (který se podílel na návrhu architektury MIPS ) a Richard L. Sites ( který byl architektem alfa architektury). Knuth to řekl
MMIX je počítač určený k ilustraci aspektů programování na úrovni stroje. V mých knihách Umění počítačového programování nahrazuje MIX , stroj ve stylu šedesátých let, který dříve hrál takovou roli ... Snažil jsem se navrhnout MMIX tak, aby jeho strojový jazyk byl jednoduchý, elegantní a snadno se učil. Současně jsem dával pozor, abych zahrnoval všechny složitosti potřebné k dosažení vysokého výkonu v praxi, aby bylo v zásadě možné MMIX vybudovat a dokonce možná být konkurenceschopný s některými z nejrychlejších počítačů pro všeobecné použití na trhu. “
Knuth zahájil návrh MMIX v roce 1999 a stabilní verzi návrhu vydal v roce 2011. Procesor je očíslován jako „2009“, přičemž Knuth vysvětluje, že toto je aritmetický průměr z počtu jiných počítačových architektur; stejně jako „MMIX“ římskými číslicemi .
Architektura
MMIX je big-endian 64bitový redukovaný soubor instrukcí (RISC) s 256 64bitovými registry pro obecné účely, 32 64bitovými registry pro speciální účely, 32bitovými instrukcemi s pevnou délkou a 64bitovou virtuální adresou prostor . Instrukční sada MMIX obsahuje 256 operačních kódů, z nichž jeden je vyhrazen pro budoucí rozšíření. MMIX používá čísla s plovoucí desetinnou čárkou IEEE 754 .
Instrukce
Všechny pokyny mají přidruženou mnemotechnickou pomůcku. Například instrukce č. 20 (32 desetinná) je spojena s ADD. Většina instrukcí má symbolický tvar OP X,Y,Z
, kde OP určuje druh instrukce, X specifikuje registr použitý k uložení výsledku instrukce a zbytek určuje operandy instrukce. Každé z těchto polí je široké osm bitů. Například ADD $0,$1,3
znamená „Nastavit 0 $ na součet 1 $ a 3“.
Většina pokynů může mít buď okamžité hodnoty, nebo obsah registru; jedna mnemotechnická instrukce tedy může odpovídat jednomu ze dvou operačních kódů.
Programy MMIX jsou obvykle konstruovány pomocí jazyka sestavení MMIXAL. Níže je jednoduchý program MMIXAL, který vytiskne řetězec „ Hello, world! “:
LOC #100 % Set the address of the program
% initially to 0x100.
Main GETA $255,string % Put the address of the string
% into register 255.
TRAP 0,Fputs,StdOut % Write the string pointed to by
% register 255 to the standard
% output file.
TRAP 0,Halt,0 % End process.
string BYTE "Hello, world!",#a,0 % String to be printed. #a is
% newline, 0 terminates the
% string.
Registry
V čipu MMIX je 256 přímo adresovatelných univerzálních architektonických registrů označených 0 až 255 dolary a 32 účelových architektonických registrů. K registrům zvláštního účelu lze přistupovat pomocí pokynů GET a PUT. Dva ze speciálních registrů, rL a rG, určují, které z obecných registrů jsou lokální a které globální. Všechny registry od $ 0 ... ([rL] - 1) jsou lokální registry a představují okno do interního zásobníku registrů. Registry z [rL] ... ([rG] - 1) jsou "okrajové registry", vždy vrátí 0, pokud jsou použity jako zdroj v operaci. Použití okrajového registru jako cíle operace způsobí, že stroj automaticky zvýší rL, aby zahrnoval tento registr. Všechny registry [rG] ... 255 $ se nazývají globální registry a nejsou součástí zásobníku registrů.
Místní zásobník registrů
Zásobník místních registrů poskytuje každému podprogramu vlastní lokální registry rL, označené 0 až $ (rL - 1) . Kdykoli je vyvolán podprogram, řada místních registrů je posunuta dolů po zásobníku (posunutím začátku okna). Argumenty volaného podprogramu jsou ponechány ve zbývajících místních registrech. Když podprogram skončí, vyskočí dříve zaslané registry. Protože interní zásobník může obsahovat pouze konečný počet registrů, může být nutné uložit část zásobníku do paměti. To je implementováno pomocí speciálních registrů rO a rS, které zaznamenávají, která část zásobníku místních registrů je v paměti a která část je stále v místních fyzických registrech. Zásobník registrů zajišťuje rychlé propojení podprogramů.
Speciální registry
32 speciálních fyzických architektonických registrů je následující:
- rB, registr bootstrapu (vypnutí)
- Při vypínání rB ← $ 255 a $ 255 ← rJ. Tím se ušetří rJ v obecném registru.
-
rD, registr dividend
- Rozdělovač celých čísel bez znaménka to používá jako levou polovinu 128bitového vstupu, který má být dělen druhým operandem.
-
rE, registr epsilon
- Používá se pro plovoucí srovnání s ohledem na epsilon.
-
rH, registr himult
- Slouží k uložení levé poloviny 128bitového výsledku násobení celých čísel bez znaménka.
-
rJ, návratový skokový registr
- Slouží k uložení adresy další instrukce PUSHes a POP pro návrat z PUSH.
-
rM, registr masky multiplexu
- Používá se instrukcí multiplexu.
-
rR, zbytek registru
- Je nastaveno na zbytek celočíselného dělení.
-
rBB, bootstrap registr (past)
- Při chytání do pasti rBB ← $ 255 a $ 255 ← rJ. Tím se ušetří rJ v obecném registru
-
rC, počítadlo cyklů
- Zvyšuje se každý cyklus.
-
rN, sériové číslo
- Konstanta identifikující tento konkrétní procesor MMIX.
-
rO, posun zásobníku registrů
- Používá se k implementaci zásobníku registrů.
-
rS, ukazatel zásobníku zásobníku
- Používá se k implementaci zásobníku registrů.
-
rI, čítač intervalů
- Sníží se každý cyklus. Při nule způsobí přerušení.
-
rT, registr adresy pasti
- Slouží k uložení adresy vypínacího vektoru.
-
rTT, dynamický registr adres pasti
- Slouží k uložení adresy vektoru pasti.
-
rK, registr masky přerušení
- Slouží k povolení a zakázání konkrétních přerušení.
-
rQ, registr požadavků na přerušení
- Slouží k záznamu přerušení, která nastanou.
-
rU, počítadlo využití
- Slouží k udržení počtu provedených pokynů.
-
rV, virtuální překladový registr
- Používá se k překladu virtuálních adres na fyzické adresy. Obsahuje velikost a počet segmentů, kořenové umístění tabulky stránek a číslo adresního prostoru.
-
rG, globální prahový registr
- Všechny odkazy na obecné registry s číslem větším nebo rovným rG odkazují na globální registry.
-
rL, místní prahový registr
- Všechny odkazy na obecné registry s číslem menším než rL odkazují na místní registry.
-
rA, aritmetický stavový registr
- Slouží k záznamu, povolení a zakázání aritmetických výjimek, jako je přetečení a dělení nulou.
-
rF, registr umístění selhání
- Slouží k uložení adresy instrukce, která způsobila selhání.
-
rP, predikční registr
- Používá se podmíněným swapem (CSWAP).
-
rW, registr přerušený (vypnutý)
- Používá se při vypínání k uložení adresy instrukce po té, která byla přerušena.
-
rX, prováděcí registr (vypnutí)
- Používá se při vypínání k uložení přerušené instrukce.
-
rY, Y operand (trip)
- Používá se při vypínání k uložení operandu Y přerušené instrukce.
-
rZ, Z operand (vypínací)
- Používá se při vypínání k uložení operandu Z přerušené instrukce.
-
rWW, kde přerušený registr (past)
- Používá se při zachycování k uložení adresy instrukce po té, která byla přerušena.
-
rXX, prováděcí registr (past)
- Používá se při zachycování k uložení instrukce, která byla přerušena.
-
rYY, Y operand (past)
- Používá se při zachycování k uložení operandu Y přerušené instrukce.
-
rZZ, Z operand (past)
- Používá se při zachycování k uložení operandu Z přerušené instrukce.
Stejně jako programy běžící na téměř všech ostatních CPU lze programy MMIX přerušit několika způsoby. Externí hardware, jako jsou časovače, jsou běžným zdrojem přerušení před výpočtem (výpočetní) . Mnoho instrukcí způsobuje v určitých výjimečných případech přerušení; jako jsou výjimky selhání stránky ochrany paměti používané k implementaci virtuální paměti a zpracování výjimek s pohyblivou řádovou čárkou . MMIX má 2 druhy přerušení: „výlety“ a „pasti“. Hlavní rozdíl mezi „vypínáním“ a „depeší“ spočívá v tom, že depeše odesílají ovládání do programu „trap handler“ v operačním systému (trapping), ale výlety odesílají ovládání do programu „trip handler“ v uživatelské aplikaci (vypínání). Uživatelé mohou také vynutit, aby jakýkoli obslužný program přerušení běžel s explicitními pokyny pro přerušení softwaru TRIP a TRAP, podobně jako některé druhy pastí v jiných počítačových systémech. Zejména systémové volání z uživatelského programu do operačního systému používá instrukci TRAP.
Hardwarové implementace
Od října 2015 neexistují žádné známé hardwarové implementace architektury instrukční sady MMIX. Nicméně, nářadí fpgammix projektu MMIX v Verilog , takže je možné realizovat pomocí hradlové pole pole programovatelné .
Softwarové nástroje
Architektura instrukční sady MMIX je podporována řadou softwarových nástrojů pro výzkum počítačové architektury a vývoj softwaru.
Simulátory a assembler
- MMIXware-Donald Knuth's MMIX-SIM simple (behavioral) simulator, MMIXAL assembler, test suite, sample programs, full documentation, and MMIX architecture (pipeline) simulator (
gzipped
tar
file). - MMIXX -grafický balíček založený na X11 od Andrewa Pochinského z Centra teoretické fyziky MIT, který v kombinaci s výše uvedenými zdroji MMIXware rozšiřuje virtuální stroj MMIX o 640 × 480 pixelů , skutečné barvy „virtuálního displeje“ ( pro UNIX/Linux).
Překladač
GNU Compiler Collection obsahuje MMIX back-end pro své C / C ++ kompilátory, přispěli Hans-Peter Nilsson a části hlavního distribuce GCC od konce roku 2001. V listopadu 2017 se MMIX back-end GCC je i nadále aktivně vyvinuté a udržované dobrovolníky.
- Pokyny k instalaci nástrojů GCC + MMIX od Hanse-Petera Nilssona.
- §3.17.26. Možnosti MMIX pro GNU GCC verze 7.2.0 (web GNU GCC).
- §9.28. MMIX závislé funkce pro GNU as od GNU binutils verze 2.29, assembler back-end pro GNU GCC (GNU Binutils Web).
Výše uvedené nástroje by teoreticky mohly být použity ke kompilaci, sestavení a zavedení celého jádra operačního systému FreeBSD , Linux nebo jiného podobného operačního systému na hardware MMIX, pokud by takový hardware existoval.
Viz také
- Vzdělávací programovací jazyk
- DLX
- LC-3
- Malý muž počítač
- MikroSim
- SMĚS
- NAR 2 , další procesor navržený profesorem, který pomáhá studentům učit se.
Reference
- Donald E. Knuth (2005). The Art of Computer Programming Volume 1 Fascicle 1: MMIX A RISC Computer for the New Millennium . Addison-Wesley. ISBN 0-201-85392-2 (errata)
externí odkazy
- Domovská stránka MMIX
- Stránka MMIX Donalda Knutha - stručný úvod do MMIX a Knuthovy důvody pro použití hypotetického montážního jazyka v TAoCP.
- Stránka novinek MMIX Donalda Knutha - simulátor open source napsaný v CWEB , příručce programátora a ukázkových programech.
- Web MMIXmasters - web pro dobrovolníky (MMIXmasters), kteří převádějí všechny programy v TAOCP, svazky 1–3, ze starého MIXu na nový MMIX.
- VMMMIX - VMMMIX je virtuální stroj MMIX. Má konzolu, HDD a ethernetové vstupy/výstupy. V současné době tento virtuální počítač běží pouze na systému Windows. A Linux běží na tomto virtuálním stroji MMIX.
- Domovská stránka VMB - Projekt virtuální základní desky nabízí kolekci zařízení typu plug and play, která lze použít s příslušnou verzí CPU MMIX.