Endianness (Norsk)

HistoryEdit

Mange historiske og bevart prosessorene bruker en big-endian minne representasjon, enten utelukkende eller som en design alternativ. Big-endian minne representasjon er ofte referert til som nettverk for, som brukes i Internet protocol suite. Andre prosessor typer bruk little-endian minne representasjon, mens andre bruker enda en ordning kalt «midt-endian», «mixed-endian» eller «PDP-11-endian».

IBMS System/360 bruker big-endian byte-rekkefølge, som gjøre sine etterfølgere System/370, ESA/390, og z/Arkitektur., PDP-10 bruker også big-endian adressering for byte-orientert instruksjoner. IBM-Serien/1 minicomputer også bruke big-endian byte-rekkefølge.

du Arbeider med data av forskjellige endianness er noen ganger kalt NUXI problem. Denne terminologien videre viser til byte for konflikter oppstått mens tilpasning av UNIX, som kjørte på mixed-endian PDP-11, en big-endian IBM-Serien/1 datamaskin. Unix var en av de første systemene for å tillate den samme koden for å være utarbeidet for plattformer med ulike interne representasjoner., En av de første programmene konvertert var ment for å skrive ut Unix, men på Serien/1 det trykt nUxi i stedet.

Datapoint 2200 bruker enkle bit-seriell logikk med little-endian å legge til rette bære forplantning. Når Intel utviklet 8008 mikroprosessor for Datapoint, brukte de little-endian for kompatibilitet., Men, som Intel var ikke i stand til å levere 8008 i tid, Datapoint brukt et medium scale integration tilsvarende, men lite endianness ble beholdt i de fleste Intel-design, inkludert MCS-48 og 8086 og dens x86-etterfølgere. DEC Alpha, Atmel AVR, VAX, MOS-Teknologi 6502 familie (inkludert Vestlige Design Center 65802 og 65C816), den Zilog Z80 (inkludert Z180 og eZ80), den Altera Nios II, og mange andre prosessorer og prosessor familier er også little-endian.

Motorola 6800 / 6801, den 6809 og 68000-serien av prosessorer som brukes big-endian-format.,

Intel 8051, i motsetning til andre Intel-prosessorer, forventer 16-bits adresser for LJMP og LCALL i big-endian-format, men xCALL instruksjoner store returadresse inn stabelen i little-endian-format.

SPARC historisk brukes big-endian til versjon 9, som er bi-endian); tilsvarende tidlig IBM POWER-prosessorer ble big-endian, men PowerPC og Makt ISA etterkommere er nå bi-endian. Den ARM-arkitekturen var little-endian før versjon 3 når det ble bi-endian.,

Gjeldende architecturesEdit

Intel x86 og AMD64 / x86-64-serien av prosessorer bruk little-endian-format. Andre instruksjonssett-arkitektur som følger av denne konvensjonen, slik at kun little-endian-modus, omfatter Nios II, Andesfjellene Teknologi NDS32, og Qualcomm Sekskant.

Noen instruksjonssett-arkitektur tillate å kjøre programvare på enten endianness på en bi-endian arkitektur. Dette inkluderer ARM AArch64, C-Sky, Elektriske ISA, og RISC-V.,

Utelukkende big-endian arkitekturer inkluderer IBM z/Arkitektur, Freescale ColdFire (som er Motorola 68000-serien-basert), Atmel AVR32, og OpenRISC. IBM AIX og Oracle Solaris på bi-endian Makt ISA og SPARC kjøre i big-endian-modus; noen distribusjoner av Linux på Kraft har flyttet til little-endian-modus.,

Bi-endiannessEdit

Noen-arkitektur (inkludert ARM-versjoner 3 og over, PowerPC, Alfa, SPARC V9, MIPS, PA-RISC, SuperH SH-4 og IA-64) har en innstilling som gjør det mulig for valgbare endianness i data henter og lagrer, instruksjon henter, eller begge deler. Denne funksjonen kan forbedre ytelsen eller forenkle logikk nettverk av enheter og programvare. Ordet bi-endian, da sa en av maskinvare, betegner evnen til maskinen for å beregne eller overføre data i enten endian-format.,

Mange av disse arkitekturer kan slås av via programvaren til standard til en bestemt endian-format (vanligvis gjort når datamaskinen starter opp), men på noen systemer er standard endianness er valgt av maskinvare på hovedkortet og kan ikke endres via programvare (for eksempel Alpha, som bare kjører i big-endian-modus på Cray T3E).

Merk at begrepet «bi-endian» refererer først og fremst til hvordan en prosessor som behandler data tilgang., Instruksjon tilgang (henter opplæring ord) på en gitt prosessor kan likevel anta en fast endianness, selv om data tilgang er fullt bi-endian, men dette er ikke alltid tilfelle, for eksempel på Intels IA-64-baserte Itanium-PROSESSOR som gjør begge deler.

Merk også at noen nominelt bi-endian Cpuer krever hovedkort bidra til å fullstendig slå endianness., For eksempel 32-biters desktop-orientert PowerPC-prosessorer i little-endian-modus fungere som little-endian fra synspunkt av gjennomføring av programmer, men de krever hovedkortet for å utføre en 64-biters swap over alle 8 byte kjørefelt for å sikre at little-endian vise ting som vil gjelde for i/O-enheter. I fravær av denne uvanlige hovedkort maskinvare, device-driveren må skrive til forskjellige adresser til å angre ufullstendig forvandling, og må også utføre en normal byte bytte.,

Noen Cpuer, slik som mange PowerPC-prosessorer beregnet for embedded bruk, og nesten alle SPARC-prosessorer, tillate per-side valg av endianness.

SPARC-prosessorer siden slutten av 1990-tallet («SPARC v9» kompatible prosessorer) tillate data endianness å bli valgt ut med hver enkelt instruksjon som laster fra eller butikker til å minne.

Den ARM-arkitekturen støtter to big-endian modus, kalt VÆRE-8 og BLI-32. Cpuer opp til ARMv5 støtte bare VÆRE-32 eller Word-Invariant-modus., Her er noen naturlig justert 32-bit tilgang fungerer som i little-endian-modus, men tilgang til en byte eller 16-bits ord blir omdirigert til den aktuelle adressen og unaligned tilgang er ikke tillatt. ARMv6 introduserer VÆRE-8 eller Byte-Invariant-modus, hvor tilgang til en eneste byte fungerer som i little-endian-modus, men har tilgang til en 16-bit, 32-bit eller (starter med ARMv8), 64-biters ord resultatene i en byte bytte av data. Dette forenkler unaligned memory access samt minnetilordnede tilgang til registre annet enn 32-biters.,

Mange prosessorer har instruksjoner for å konvertere et ord i et register til det motsatte endianness, det vil si at de vil bytte om på rekkefølgen av byte i en 16-, 32 – eller 64-bits ord. Alle de individuelle biter er ikke snudd om.

Nylig Intel x86 og x86-64-arkitektur Cpuer har en MOVBE instruksjon (Intel Core siden generasjon 4, etter Atom), som henter en big-endian-format ord fra minnet, eller skriver et ord i minnet i big-endian-format. Disse prosessorene er ellers grundig little-endian., De har også allerede hatt en rekke swap instruksjonene for å reversere byte-rekkefølgen på innholdet i registrene, for eksempel når ordene har allerede blitt hentet fra minnet steder hvor de var i ‘feil’ endianness.

Flytende pointEdit

Selv om den allestedsnærværende x86-prosessorer i dag bruk little-endian lagring for alle typer av data (heltall, floating point), er det en rekke av maskinvare arkitekturer hvor floating-point-tall er representert i big-endian form mens heltall er representert i little-endian form., Det er ARM-prosessorer som har halvparten little-endian, halv big-endian floating-point representasjon for dobbel presisjon tall: både 32-bit ord er lagret i little-endian som heltall registrene, men det viktigste først. Fordi det har vært mange floating-point-formater med ingen «nettverk» standard representasjon for dem, XDR standard bruker big-endian IEEE 754 som sin representasjon. Det kan derfor synes underlig at den utbredte IEEE 754 floating-point standard angir ikke endianness., I teorien, dette betyr at selv standard IEEE floating-point data skrevet av en maskin kan ikke leses av andre. Imidlertid, på moderne standard datamaskiner (dvs., implementering av IEEE 754), kan man i praksis trygt anta at endianness er den samme for floating-point tall som for heltall, noe som gjør konverteringen grei uansett datatype. (Liten embedded systemer ved hjelp av spesielle floating-point-formater kan være en annen sak, men.,)

Variabel lengde dataEdit

de Fleste instruksjoner vurdert så langt inneholde størrelsen (lengden) av sin operander i drift kode. Ofte tilgjengelig operand lengde er 1, 2, 4, 8 eller 16 byte.Men det er også arkitekturer der lengden av en operand kan holdes i et eget felt av instruksjon eller med operand i seg selv, e. g. ved hjelp av et ordmerke. En slik tilnærming gjør operand lengder opp til 256 byte eller selv fullt minne størrelse.Data typer av slike operander er tekststrenger eller BCD.,

OptimizationEdit

The little-endian systemet har den egenskapen at den samme verdien som kan leses fra minnet på forskjellige lengder uten å bruke ulike adresser (selv når justeringen restriksjoner som er pålagt). For eksempel, en 32-bit minne beliggenhet med innhold 4A 00 00 00 – kan leses på samme adresse som enten 8-biters (verdi = 4A), 16-biters (004A), 24-biters (00004A), eller 32-biters (0000004A), som beholder det samme numeriske verdi., Selv om dette little-endian eiendom er en sjelden brukt direkte av høyt nivå programmerere, det er ofte brukt av koden optimizer så vel som av assembly programmerere.

I mer konkret forstand, slik optimalisering er tilsvarende de følgende C-kode returnerer sann på de fleste little-endian systemer:

union { uint8_t u8; uint16_t u16; uint32_t u32; uint64_t u64;} u = { .u64 = 0x4A };puts(u.u8 == u.u16 && u.u8 == u.u32 && u.u8 == u.u64 ? "true" : "false");

Mens ikke tillatt med C++, en slik type punning-kode er tillatt som «implementering-definert» av C11-standarden, og som vanligvis brukes i koden samspill med maskinvare.,

På den annen side, i noen situasjoner kan det være nyttig å få en tilnærming av en multi-byte eller multi-ord verdi ved å lese bare den mest vesentlige delen i stedet for fullstendig representasjon, en big-endian-prosessor kan du lese en slik tilnærming ved hjelp av den samme base-adresse som vil bli brukt til full verdi.

Optimaliseringer av denne typen er ikke portable på tvers av systemer av ulike endianness.

Beregning orderEdit

Noen operasjoner i stedsbestemt antall systemer har en naturlig eller foretrukket rekkefølge som de grunnleggende trinnene for å bli henrettet.,Denne rekkefølgen kan påvirke deres ytelse på små-skala byte-adresserbare prosessorer og mikrokontrollere.

Imidlertid høy ytelse prosessorer vanligvis hente typisk multi-byte operander fra minnet i den samme tiden de ville ha hentet en eneste byte, så kompleksiteten av maskinvare er ikke påvirket av byte bestilling.

Operasjoner starter på den minst signifikante digitEdit

Som du har lært på skolen, addisjon, subtraksjon og multiplikasjon start på den minst signifikante sifferet og spre bære til neste mer betydelig posisjon.,Adressering multi-sifret data på sin første (= minste adresse) byte er den dominerende adressering ordningen.Når denne første byte inneholder minst signifikante siffer – som er tilsvarende lite endianness, da gjennomføringen av disse operasjonene er marginalt enklere.

Operasjoner starter på den mest betydningsfulle digitEdit

Sammenligningen og divisjon start på det mest signifikante sifferet og spre mulig å bære den påfølgende mindre signifikante sifre., For fast lengde numeriske verdier (vanligvis av lengden 1,2,4,8,16), gjennomføringen av disse operasjonene er marginalt enklere på big-endian maskiner.

Operander av varierende lengthEdit

I programmeringsspråket C den leksikografiske sammenligning av tekststrenger må gjøres av subrutiner, som ofte tilbys og gjennomføres som en delrutine (e. g. strcmp).

Mange big-endian prosessorer inneholder maskinvare instruksjoner for lexicographically sammenligning av varierende lengde tekststrenger (e. g. IBMS System/360 og dens etterfølgere).,

Operasjoner uten impactEdit

Den normale data transport av et oppdrag uttalelse er i prinsippet uavhengig av endianness av prosessoren.

Midt-endianEdit

Mange andre orderings, generelt kalt midt-endian eller blandet-endian, er mulig. Et slikt eksempel utenfor informatikk er standard American dato formatering av måned/dag/år.

PDP-endianEdit

PDP-11 er i prinsippet en 16-bit little-endian system., Instruksjonene for å konvertere mellom floating-point og heltall verdier i den valgfrie floating-point-prosessor på PDP-11/45, PDP-11/70, og i noen nyere prosessorer, som er lagret 32-bit «dobbel presisjon heltall lang» verdier med 16-bit halvdeler byttet fra forventet little-endian ordre. UNIX-C-kompilatoren brukt samme format for 32-bit lange heltall. Denne bestilling er kjent som PDP-endian.

En måte å tolke dette endianness er at den lagrer en 32-biters heltall som to 16-bits ord i big-endian, men ordene selv er little-endian (E. g., «jag cog sin» would be «gaj goc nis»):

Storage of a 32-bit integer, 0x0A0B0C0D, on a PDP-11
increasing addresses →
0Bh 0Ah 0Dh 0Ch
0A0Bh 0C0Dh …,

16-bits verdier her kan du se deres numeriske verdier, og ikke på selve utformingen.

Honeywell-Serien 16Edit

Honeywell-Serien 16 16-biters datamaskiner, inkludert Honeywell 316, er det motsatte av PDP-11 i lagring 32-bit ord i C., It stores each 16-bit word in big-endian order, but joins them together in little-endian manner:

storage of a 32-bit integer, 0x0A0B0C0D, on a Honeywell 316
increasing addresses →
0Ch 0Dh 0Ah 0Bh
…, 0C0Dh 0A0Bh

Intel IA-32 segment descriptorsEdit

Segment descriptors of IA-32 and compatible processors keep a 32-bit base address of the segment stored in little-endian order, but in four nonconsecutive bytes, at relative positions 2, 3, 4 and 7 of the descriptor start.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *