Ortogonalan skup naredbi

U računarskom inženjerstvu, ortogonalni skup instrukcija je skup instrukcija arhitekture gde svi tipovi instrukcija mogu koristiti sve načini adresiranja. On je „ortogonalni“ u smislu da instrukcijski tip i adresni mod variraju nezavisno. Ortogonalni skup instrukcija ne nameće ograničenja koja zahtevaju da određena instrukcija koristi određeni registar. [1]

Ortogonalnost u praksi uredi

U mnogim CISCračunarima, instrukcija može da pristupi ili registru ili memoriji, obično na više različitih načina. Ovo čini CISC računare lakšim za programiranje, jer umesto da moraju da pamte hiljade pojedinačnih instrukcija, ortogonalni skup instrukcija dozvoljava da programer zapamti samo nekoliko desetina do nekoliko stotina operativnoh kodova (kao što su: "ADD", "SUBTRACT", "MULTIPLY", "DIVIDE", i drugi), i set od tri do deset adresnih režima (kao što su: "FROM REGISTER 0", "FROM REGISTER 1", "FROM MEMORY", i drugi). DEC PDP-11 i Motorola 68000 računarske arhitekture su primeri gotovo ortogonalnih skupova instrukcija.

The PDP-11 uredi

Sa izuzetkom njegovih instrukcija u pokretnom zarezu, PDP-11 je skoro kompletno ortogonalni set. Svaka po tipu celobrojna instrukcija je mogla raditi na ili 1-bajtnom ili 2-bajtnom celobrojnom vrednošću i mogla je da pristupi podacima uskladištenim u registrima, ukladištenim kao delovi instrukcija, uskladištenim u memoriju, ili uskladištenim u memoriju sa pokazivačem na adresu u registru. Čak je i programski brojač i pokazivač steka mogao da bude pogođen običnim instrukcijama koristeći obične tipove podataka. U stvari, nepostedni tip (u okviru instrukcija kao što je: ADD #4, R1 (R1 = R1 + 4)) je implementiran kao tip „registruj indirektno, automatski pripadaj“ i navodeći programski brojač (R7) kao registar u cilju korišćenja reference za indirektnost i automatsko pripadanje.

Pošto je PDP-11 bio oktalno-orijentisani računar (adresni režim 0-7, registri R0–R7) imao je (elektronski) osam načina adresiranja. Kroz korišćenje stek pointera (R6) i programskog brojača (R7) kao referencnnog registra, mogli se adresirati na deset načina.

VAX-11 uredi

VAX-11 je produžena verzija PDP-11, ovaj sistem bio je ortogonalni za sve tipove podataka, uključujući i decimalne tipove (mada su instrukcije kao sto su 'ADD' bile podeljene na varijante kao što su ADDB, ADDW, ADDL, ADDP, ADDF, ili bajt, reč, duga reč). Kao i PDP-11, stek pointer i programski brojač bili su u opštem registru fajla (R14 i R15).

Opšti oblik VAX-11 instrukcije bio bi :

     opcode [ operand ] [ operand ]  ...

Svaka komponenta je jedan bajt, vrednost opcode je u opsegu 0-255, i svaki operand se sastoji od dva dela, gornja 4 bita određuju adresni režim, a donja 4 bita (obično) označavaju broj registra (R0–R15).

Za razliku od oktalno-orijentisanih računara PDP-11, VAX-11 postojale su i heksadecimalno-orijentisani računari (4-bitni pod-bajt). ovo je dovelo do 16 logičkih adresnih režima (0–15), međutim, adresni režimi 0-3 bili su „kratko neposredni“ za neposredne podatke od 6 bita ili manje (2 donja bita adresnog režima bila su 2 gornja bita neposrednih podataka, kada bi primili ostalih 4 bita tog adresiranog podatka). Pošto su načini adresiranja režima 0-3 bili identični, ovo je činilo 13 (elektronskih) adresnih režima, ali kao i kod PDP-11, upotreba stek pointera (R14) i programskog brojača (R15) činila je ukupno 15 konceptualnih adresnih režima (zajedno sa asemblerom koji je prevodio izvorni kod u stvarni stek pointer ili programski brojač).

MC68000 uredi

Motorolini dizajneri pokušali su da naprave sklop asemblerskih jezika ortogonalnim dok bi osnovni mašinski jezik bio nešto manji. Za razliku od PDP-11, MC68000 je koristio odvojene registre za skladištenje podataka i adresa podataka u memoriji.

Na nivou bita, osoba koja bi pisala asembler (ili kod sa otklanjanje grešaka) jasno bi videla da simboličke instrukcije mogu postati bilo koji ili nekoliko različitih op-kodova. Ovaj kompromis je dao skoro iste pogodnosti kao i totalno ortogonalni računar, a ipak je dao procesorskim dizajnerima slobodu da koriste bitove u instrukcijama mnogo efikasnije nego na čitno ortogonalnom nivou.

8080 i slični dizajni uredi

8-bitni Intel 8080 (kao i 8085 i 8051) mikroprocesor bio je u osnovi neznatno proširen akumulatorsko-zasnovan dizajn i stoga ne ortogonaln. Programer ili kompilator asemblerkog jezika morao da bude svestan koje operacije su moguće na svakom registru: Većina 8-bitnih operacija mogla je da se vrši samo na 8-bitnom akumulatoru (A registru), dok je 16-bitna operacija mogla da se vrši samo na 16-bitnom pokazivaču/akumulatoru (HL-registar par), dok jednostavne operacije, kao što su proširenja, su bile moguće na svih sedam 8-bitnih registara. To je uglavnom zbog želje da zadrže svi opcodes dužine jedan bajt i da se održi kompatibilnost izvornog koda sa originalnim Intel 8008 (LSI - implementacija procesora Datapoint 2200-a).

Binarno-kompatibilan Z80 kasnije dodat prefiks-kod da pobegne iz ovog 1-bajt ograničenja i omogući moćniji skup instrukcija. Ista osnovna ideja je bila za Intel 8086, mada, kako bi se omogućila radikalnija ekstenzija, binarna-kompatibilnost sa 8080 nije ovde pokušana, već je 8086 dizajniran kao više redovno i potpuno 16-bitni procesor koji je kompatibilan sa 8008, 8080, 8085. Ona održava neki stepen ne-ortogonalnosti zbog visoke gustine koda. 32-bitno produženje ove arhitekture koja je uvedena sa 80386, bila je nešto više ortogonalna uprkos čuvanju svih instrukcija kao i kod 8086. Međutim, strategija kodiranja dalje pokazuje mnoge tragove iz 8008 i 8080 (i Z80); na primer, jedan-bajt kodiranja ostaje za određene česte operacije kao što su push i pop registari i konstante, i primarni akumulator, EAKS, kraće kodiranje od drugih registara na određenim vrstama operacija.

RISC doba uredi

Potpuno ortogonalna arhitektura možda nije najviše efikasna arhitektura. Kasnih 1970tih istraživanje IBM-a (i slični projekti) pokazali su da je većina ovih „ortogonalnih“ načina adresiranja ignorisana od strane većine programa. Možda neki od bitova koji su korišćeni da se izrazi potpuno ortogonalni skup instrukcija, umesto toga mogli biti upotrebljeni da izrazi više virtuelnih adresa bita ili izabrati iz redova više registara.

U RISC doba, računarski dizajneri nastojali da postignu balans koji su mislili da je najbolji. Konkretno, većina RISC računara, dok je još uvek bila veoma ortogonalna u odnosu na koje instrukcije mogu procesuirati koji tipova podataka, sada su se vratili na „učitaj/snimi“ arhitekturu. U ovim arhitekturama, samo vrlo malo memorije referentne instrukcije može da pristupi glavnoj memoriji i samo u svrhu utovara podataka u registrima ili čuvanje registara podataka nazad u glavnu memoriju, samo nekoliko načina adresiranja može biti na raspolaganju, a ovi režimi mogu da variraju u zavisnosti od da li se instrukcija odnosi na podatke ili podrazumeva prenos kontrole (skoka). Nasuprot tome, podaci moraju biti u registrima pre nego što se može upravljati na strane drugih uputstva u setu instrukcija računara. Ova trgovina je napravljena van eksplicitno da omogući korišćenje mnogo većih register setova, produženih virtuelnih adresa i više neposrednih podataka (podaci upisani direktno u okviru nastave računara).

Reference uredi

  1. ^ Null, Linda; Lobur, Julia (2010). The Essentials of Computer Organization and Architecture. Jones & Bartlett Publishers. str. 287—288. ISBN 978-1-4496-0006-8.