Ord (informatikk)

Ord (engelsk: word) er en benevnelse som benyttes om den naturlige datastørrelsen i en gitt datamaskin. Et ord er ganske enkelt en samling av bit som håndteres samtidig av maskinen. Antallet bit i et ord, kalt ordstørrelsen, er et viktig kjennetegn ved enhver datamaskinarkitektur. Vanlige ordstørrelser i dagens PC-er er 32 og 64 bit.
Ordstørrelsen påvirker mange sider av datamaskinens oppbygging og virkemåte. De aller fleste registrene er vanligvis på størrelse med et ord. Ordstørrelsen har sammenheng med hvor store tall datamaskinen opererer med. Mengden data som overføres mellom CPU og dataminnet er vanligvis på størrelse med et ord. Det samme er også adressene som brukes til å angi hvor noe ligger i minnet.
Moderne datamaskiner opererer ofte med ordstørrelser på 16, 32 og 64 bit. Et utall andre størrelser har blitt brukt opp gjennom historien, for eksempel 8, 9, 12, 18, 24, 36, 39, 40, 48 og 60 bit. Noen av de tidligste datamaskinene brukte titallsystemet istedenfor det binære, og hadde dermed ordstørrelser på 10 eller 12 desimale sifre. Noen hadde ikke noen fast ordstørrelse i det hele tatt.
Noen ganger er ordstørrelsen definert med tanke på kompatibilitet med tidligere datamaskiner. Den mest vanlige mikroprosessoren i personlige datamaskiner (slik som Intels Pentium og AMDs Athlon) er eksempler på dette. Intels IA-32-arkitektur er en utvidelse av designet til Intel 8086, som hadde en ordstørrelse på 16 bit. IA-32-prosessorer støtter fortsatt programmer skrevet for 8086 (x86), så definisjonen av et ord forble på 16 bit, selv om de nå vanligvis opererer med datatyper med 32 bit. Dette har blitt overført videre til x86-64-arkitekturen, som også definerer et ord som 16 bit, til tross for at de er laget for å vanligvis jobbe med datatyper med 64 bit.


== Bruk ==
Alt ettersom hvordan datamaskinen er organisert, blir datatyper på størrelse med ordstørrelsen brukt til:

Heltall: Lagringsplasser for heltall kan være tilgjengelige i en eller flere størrelser, men én av disse vil nesten alltid være på størrelse med et ord. De andre vil enten være fraksjoner av et ord eller bestå av et helt antall ord. De mindre størrelsene benyttes for å spare plass under lagring når tallverdiene er små. Inne i prosessoren vil verdiene vanligvis oppbevares og behandles i form av ord.
Flyttall: Flyttall lagres vanligvis i et helt antall ord.
Adresser: Adresser må kunne være så store som nødvendig, men ikke for store. Vanligvis representeres de med ett ord, men andre størrelser er også mulig.
Registre: Prosessorens registre må være store nok til å få plass til de dataene de skal håndtere, enten det er heltall, flyttall eller adresser. Mange datamaskiner har generelle registre som kan brukes til mange slags data. Disse registrene må være store nok til å få plass til den største dataenheten, som vanligvis er tilsvarer ordstørrelsen på den aktuelle arkitekturen.
Minneaksesser: Når prosessoren leser fra minnet og inn i et register, eller skriver innholdet i et register ut til minnet, overfører den ofte ett ord om gangen. Med enkle minnesystemer gjøres dette over databussen, som ofte har en bredde tilsvarende ett eller ett halvt ord. Når cacher inngår i minnesystemet, er det forbindelsen mellom prosessor og det første cache-nivået som overfører ord. Lenger ned i minnehierarkiet overføres som regel flere ord om gangen.
Adresseringsenhet: I en gitt arkitektur vil etterfølgende adresser representere etterfølgende minneenheter. I de fleste datamaskiner vil vil disse enhetene kunne holde på et tegn (byte) eller et ord. Noen få har også kunnet adressere enkeltbit. Hvis enheten er et ord, vil man kunne aksessere en større minnemengde for en gitt adressestørrelse. På den annen siden vil man ved å bruke enheter bestående av byte kunne adressere enkelttegn.
Instruksjoner: Instruksjoner utgjør vanligvis fraksjoner av eller et helt antall ord. Dette er et naturlig valg når instruksjoner og data deler det samme minnesystemet. I Harvard-arkitekturer er det ikke nødvendigvis noen sammenheng mellom ordstørrelsen for instruksjoner og for data.


== Valg av størrelse ==
Valg av ordstørrelse er en viktig faktor når man designer en ny datamaskinarkitektur. Ofte vil de forskjellige bruksområdene ha preferanser for forskjellige antall bit, men for designet i sin helhet vil det være best om man holder seg til én størrelse eller et lite antall størrelser. Disse størrelsene vil enten består av et helt antall av en grunnleggende størrelse, eller gå opp et helt antall ganger i en grunnleggende størrelse. Denne grunnleggende størrelsen blir ordstørrelsen.
Tegn- eller bytestørrelsen har ofte betydning for valget av ordstørrelse. Frem til midten av 1960-årene lagret man ofte tegn i seks bit, som gjorde det mulig å representere 64 forskjellig tegn (store bokstaver, sifre, osv.). Ettersom det var mest praktisk, valgte man å ha ord som bestod av et helt antall tegn. I 6-bit binære maskiner var en ordstørrelse på 36-bit vanlig, noe som også passet godt til flyttall.
Da IBM lanserte System/360 ble det standard å benytte 8 bit til å representere tegn, noe som gjorde at også små bokstaver kunne brukes. Ordstørrelsen ble følgelig multipler av 8 bit, med 16, 32 og 64 bit som vanlige ordstørrelser.


=== Arkitekturer med varierende ordstørrelse ===
Tidlige maskiner hadde gjerne arkitekturer som benyttet noe som har blitt kalt variabel ordstørrelse. I slike maskiner hadde ikke operander noen fast størrelse. En spesiell markering ble isteden brukt for å angi slutten. Slike maskiner lagret ofte tall som BCD-kode. Eksempler på slike maskiner er IBM 702, IBM 705, IBM 7080, IBM 7010, UNIVAC 1050, IBM 1401 og IBM 1620.


=== Ord- og byteadressering ===
Hvordan minnet er lagt opp i en arkitektur avhenger av ordstørrelsen, og da spesielt størrelsen på den minste minneenheten som kan adresseres direkte. Dette har ofte hvert et ord, noe som gjør at etterfølgende adressenumre viser til etterfølgende ord i minnet. Dette er hensiktsmessig for datamaskiner som nesten alltid opererer på data som består at ett eller flere hele ord. Dette gjør at adressene blir mindre enn om man hadde kunnet adressere mindre enheter, noe som sparer plass. Dette gjør det igjen mulig å ha mindre instruksjoner eller flere forskjellige typer instruksjoner.
Når behandling av individuelle byte er vanlig, vil det være mer praktisk å kunne adressere hvert enkelt byte i minnet fremfor de større ordene. Dette krever flere bit i adressen for samme mengde minne. Det er fortsatt mulig å adressere ord, så lenge de består av et helt antall byte. Dette var løsningen man valgte for IBM 360, og har vært den mest vanligste siden.


=== Toerpotens ===
Avhengig av presisjonen man er ute etter, trenger man forskjellige mengder minne for å lagre verdier. Det vanligste er at disse størrelsene er størrelsen på den minste adresserbare dataenheten (byte eller ord) ganget med en toerpotens. For å regne om en indeks inn i en tabell til en minneadresse trenger man dermed bare å utføre et bitskift fremfor å måtte utføre en multiplikasjon. Grunnet dette er antallet byte i et ord i moderne datamaskiner en toerpotens.


== Størrelsefamilier ==
Ettersom datamaskiner har blitt mer komplekse, har viktigheten av én sentral ordstørrelse i en arkitektur gått ned. De mer avanserte prosessorene i dag kan håndtere mange forskjellige datastørrelser, men markedskreftene presser på for å beholde bakoverkompatibilitet med eksisterende prosessorer. Resultatet er at det som ville vært den sentrale ordstørrelsen i det nye designet blir nødt til å dele rollen med den sentrale ordstørrelsen i det gamle designet. Den originale ordstørrelsen blir dermed værende i alle fremtidige kompatible design og blir dermed basisen i en størrelsefamilie.
Midt i 1970-årene utviklet Digital Equipment Corporation (DEC) VAX som en etterfølger til PDP-11. Selv om VAX var en 32-bit arkitektur, brukte de betegnelsen word (ord) om en størrelse på 16 bit mens betegnelsen longword (langt ord) ble benyttet om 32 bit. Dette står i kontrast til tidligere maskiner, hvor den naturlige datastørrelsen ble kalt ord og den halve størrelsen halvord, hvis noe i det hele tatt. I tillegg kalte VAX 64 bit for quadword, hvor quad kommer av det latinske ordet for fire.
Et annet eksempel er x86-familien. Den originale 8086-arkitekturen hadde en ordstørrelse på 16 bit, men den senere 80386 var en prosessor som opererte med 32 bit. Hadde 80386 vært et selvstendig design, ville ordstørrelsen vært 32 bit, men som en videreføring av 8086-designet forble benevnelsen ord knyttet til en datastørrelse på 16 bit. Det samme skjedde igjen med x86-64 som gikk over til 64 bit som naturlig enhet, men beholdt kompatibiliteten med de tidligere 16- og 32-bit prosessorene, og dermed 16-bit ord.
Dermed vil man i dag se datamaskinarkitekturer basert på en familie med nært beslektede størrelser snarere enn én enkelt altoverskyggende ordstørrelse. I en slik familie vil de mindre størrelsen gå et helt antall ganger opp i de større. Å trekke frem én av disse størrelsene som ordstørrelsen vil virke tilfeldig, og den størrelsen som kalles ord kan hete det kun av historiske grunner.


== Dword, Qword og Oword ==
Sentrale størrelser utover ordet får gjerne egne navn. Dword (double word eller dobbeltord) er en enhet dobbelt så stor som et ord. På x86-maskiner, hvor ordstørrelsen er 16 bit, vil dword stå for en dataenhet på 32 bit eller 4 byte.
Qword (quadword eller kvadrupelord) er en dataenhet like stor som fire ord. For å igjen bruke x86 som eksempel, vil et Qword består av 64 bit siden et ord består av 16 bit enten prosessoren er 16-, 32- eller 64-bit.
Intel har brukt benevnelsen double quadrouple word eller DQword om dataenheten på 128 bit brukt av SSE. I Microsofts x86-baserte Macro Assembler (MASM) ble den samme datastørrelsen kalt Oword (octuple word). Benevnelsene octaword og double quadword (DQ) er også brukt.


== Litteratur ==
Gerrit A. Blaauw & Frederick P. Brooks (1997). Computer Architecture: Concepts and Evolution. Addison-Wesley. ISBN 0-201-10557-8. 
Anthony Ralston & Edwin D. Reilly (1993). Encyclopedia of Computer Science Third Edition. Van Nostrand Reinhold. ISBN 0-442-27679-6. 


== Referanser ==