HistoryEdit
mange historiske og eksisterende processorer bruger en big-endian-hukommelsesrepræsentation, enten udelukkende eller som designmulighed. Big-endian hukommelse repræsentation er almindeligvis omtales som Net orderork order, som anvendes i Internet protocol suite. Andre processortyper bruger little-endian-hukommelsesrepræsentation; andre bruger endnu et skema kaldet “middle-endian”, “mi .ed-endian” eller “PDP-11-endian”.
IBM System/360 bruger big-endian byte order, ligesom dets efterfølgere System/370, ESA/390 og. / Architecture., PDP-10 bruger også big-endian adressering for byte-orienterede instruktioner. IBM Series / 1 minicomputer bruger også big – endian byte order.
håndtering af data af forskellig endianness kaldes undertiden nu .i-problemet. Denne terminologi henviser til de byte-ordenskonflikter, der opstod under tilpasning af UNI., der løb på den blandede ENDISKE PDP-11, til en big-endian IBM Series/1-computer. Uni.var et af de første systemer, der gjorde det muligt at kompilere den samme kode til platforme med forskellige interne repræsentationer., Et af de første konverterede programmer skulle udskrive Uni.
, men på serien/1 udskrives det nu .i
i stedet.
Datapoint 2200 bruger simpel bit-seriel logik med little-endian for at lette bæreudbredelse. Da Intel udviklede 8008 mikroprocessoren til Datapoint, brugte de little-endian til kompatibilitet., Men, som Intel var i stand til at levere 8008 i gang, Datapoint brugt et medium skala integration tilsvarende, men lidt-endethed blev bevaret i de fleste Intel designs, herunder MCS-48 og den 8086 og sin x86 efterfølgere. DEC Alpha, Atmel AVR-enheden, VAX, MOS Teknologi 6502 familie (herunder Vestlige Design Center 65802 og 65C816), den Zilog Z80 (herunder Z180 og eZ80), Altera Nios II, og mange andre processorer, og processor familier er også little-endian.
Motorola 6800 / 6801, 6809 og 68000-serien af processorer brugte big-endian-formatet.,
Intel 8051, i modsætning til andre Intel-processorer, der forventer, at 16-bit adresser, for LJMP og LCALL i big-endian-format; men xCALL instruktioner butik retur-adresse på stakken i little-endian-format.
SPARC historisk big-endian til version 9, som er bi-endian; tilsvarende tidligt IBM POWER-processorer blev big-endian, men PowerPC og Magt ISA efterkommere er nu bi-endian. ARM-arkitekturen var little-endian før version 3, da den blev bi-endian.,
nuværende arkitekturrediger
Intel processors86-og AMD64 / .86-64-serien af processorer bruger little-endian-formatet. Andre instruktion sæt arkitekturer, der følger denne konvention, tillader kun little-endian tilstand, omfatter Nios II, Andes Technology NDS32, og Heualcomm he .agon.
nogle instruktionssætarkitekturer tillader at køre soft .are med enten endianness på en bi-endian arkitektur. Dette omfatter ARM AArch64, C-Sky, Po ,er ISA og RISC-V.,
Udelukkende big-endian arkitekturer omfatter IBM z/Arkitektur, Freescale ColdFire (som er Motorola 68000 series-baseret), Atmel AVR32, og OpenRISC. IBM AIX og Oracle Solaris-operativsystemer til bi-endian Magt ISA og SPARC kører i big-endian-tilstand; nogle distributioner af Linux på Magten er flyttet til little-endian-tilstand.,
Bi-endiannessEdit
Nogle arkitekturer (herunder ARM versioner 3, og ovenfor, PowerPC, Alpha, SPARC V9, MIPS, PA-RISC, SuperH SH-4-og IA-64) har en indstilling, som giver mulighed for omskiftning endethed i data henter og gemmer, instruktion henter, eller begge dele. Denne funktion kan forbedre ydeevnen eller forenkle logikken i netværksenheder og soft .are. Ordet bi-endian, når det er sagt om Hard .are, angiver maskinens evne til at beregne eller videregive data i enten endian-format.,
Mange af disse arkitekturer kan tændes via software til standard til en bestemt endian-format (normalt har gjort, når computeren starter op), men på nogle systemer standard endethed er valgt af hardware på bundkortet, og kan ikke ændres via software (f.eks Alfa, som kun kører i big-endian-tilstand på Cray T3E).
Bemærk, at udtrykket “bi-endian” primært refererer til, hvordan en processor behandler dataadgang., Instruktionsadgang (hentninger af instruktionsord) på en given processor kan stadig antage en fast endianness, selvom dataadgangene er fuldt bi-endian, selvom dette ikke altid er tilfældet, såsom på Intels IA-64-baserede Itanium CPU, som tillader begge.bemærk også, at nogle nominelt bi-endian CPU ‘ er kræver bundkort hjælp til fuldt ud at skifte endianness., For eksempel, 32-bit desktop-orienteret PowerPC-processorer i little-endian-tilstand fungere som little-endian fra det synspunkt af den fuldbyrdende programmer, men de kræver bundkortet til at udføre en 64-bit swap på tværs af alle 8 byte baner for at sikre, at little-endian opfattelse af tingene vil anvende til i/O-enheder. I mangel af denne usædvanlige bundkort hardware, enheden driver software skal skrive til forskellige adresser til at fortryde ufuldstændig forvandling, og de skal også udføre en normal byte swap.,nogle CPU ‘ er, såsom mange po .erpc-processorer beregnet til indlejret brug og næsten alle SPARC-processorer, tillader Per side valg af endianness.SPARC-processorer siden slutningen af 1990 ‘ erne (“SPARC v9” – kompatible processorer) gør det muligt at vælge dataendianness med hver enkelt instruktion, der indlæses fra eller gemmer til hukommelsen.
ARM-arkitekturen understøtter to big-endian tilstande, kaldet BE-8 og BE-32. CPU ‘ er op til ARMv5 understøtter kun BE-32 eller Wordord-Invariant-tilstand., Her fungerer enhver naturligt justeret 32-bit adgang som i little-endian-tilstand, men adgang til et byte-eller 16-bit-ord omdirigeres til den tilsvarende adresse, og uændret adgang er ikke tilladt. ARMv6 introducerer BE-8 eller Byte-Invariant mode, hvor adgang til en enkelt byte fungerer som i little-endian mode, men adgang til en 16-bit, 32-bit eller (startende med ARMv8) 64-bit wordord resulterer i en byte s .ap af dataene. Dette forenkler unaligned hukommelse adgang samt hukommelse kortlagt adgang til andre end 32 bit registre.,mange processorer har instruktioner til at konvertere et ord i et register til den modsatte ende, det vil sige, de bytter rækkefølgen af bytes i et 16-, 32 – eller 64-bit ord. Alle de enkelte bits er dog ikke omvendt.
de Seneste Intel x86-og x86-64 arkitektur Cpu ‘ er har en MOVBE instruktion (Intel Core da generation 4, efter Atom), der henter en big-endian-format ord fra hukommelsen eller skriver et ord i hukommelsen i big-endian-format. Disse processorer er ellers grundigt little-endian., De havde også allerede en række S .ap-instruktioner til at vende byte-rækkefølgen af indholdet af registre, såsom når ord allerede er hentet fra hukommelsessteder, hvor de var i den ‘forkerte’ ende.
Flydende pointEdit
Selv om den allestedsnærværende x86-processorer i dag bruger little-endian opbevaring til alle typer af data (heltal, kommatal), der er en række hardware-arkitekturer, hvor flydende tal er repræsenteret i big-endian form, mens hele tal, der er repræsenteret i little-endian form., Der er ARM-processorer, der har halvt little-endian, halvt big-endian flydende punktrepræsentation for dobbeltpræcisionsnumre: begge 32-bit ord gemmes i little-endian som heltalsregistre, men den mest betydningsfulde først. Fordi der har været mange floating-point formater uden” netværk ” standard repræsentation for dem, bruger standarddr standard big-endian IEEE 754 som sin repræsentation. Det kan derfor virke underligt, at den udbredte IEEE 754 floating-point-standard ikke angiver endianness., Teoretisk betyder det, at selv standard IEEE floating-point data skrevet af en maskine muligvis ikke kan læses af en anden. På moderne standardcomputere (dvs.implementering af IEEE 754) kan man i praksis sikkert antage, at endelsen er den samme for flydende punktnumre som for heltal, hvilket gør konverteringen ligetil uanset datatype. (Små indlejrede systemer, der bruger specielle floating-point-formater, kan dog være en anden sag.,)
data med variabel længde rediger
de fleste instruktioner, der hidtil er overvejet, indeholder størrelsen (længderne) af dens operander inden for operationskoden. Ofte tilgængelige operand længder er 1, 2, 4, 8 eller 16 bytes.Men der er også arkitekturer, hvor længden af en operand kan holdes i et separat felt i instruktionen eller med selve operanden, f. eks. ved hjælp af et ordmærke. En sådan tilgang tillader operand længder op til 256 bytes eller endda fuld hukommelsesstørrelse.Datatyperne af sådanne operander er tegnstrenge eller BCD.,
OptimizationEdit
little-endian-system har den egenskab, at den samme værdi, der kan læse fra hukommelsen i forskellige længder uden at bruge forskellige adresser (selv når tilpasningen begrænsninger er pålagt). For eksempel, en 32-bit memory beliggenhed med indhold 4A 00 00 00
kan læses på samme adresse som enten 8-bit (værdi = 4A), 16-bit (004A), 24-bit (00004A) eller 32-bit (0000004A), som alle, der bevarer den samme numeriske værdi., Selv om denne lille endian ejendom sjældent bruges direkte af højt niveau programmører, det er ofte ansat af kode optimi .ers samt af assembly sprog programmører.
mere konkret, disse optimeringer er det tilsvarende af følgende C-kode, der vender rigtigt, på de fleste little-endian-system:
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 tilladt i C++, såsom type punning kode er tilladt som “gennemførelse-defineret” ved C11 standard, og som ofte anvendes i koden interagere med hardware.,
På den anden side, i nogle situationer kan det være nyttigt at få en tilnærmelse af en multi-byte eller multi-ordet værdi ved at læse kun den mest betydningsfulde del i stedet for den fuldstændige repræsentation; en big-endian-processor kan læse sådan en tilnærmelse ved hjælp af den samme base-adresse, der skal bruges til den fulde værdi.optimeringer af denne art er ikke bærbare på tværs af systemer med forskellig endethed.
Beregningsordredit
nogle operationer i positionsnummersystemer har en naturlig eller foretrukken rækkefølge, hvor de elementære trin skal udføres.,Denne ordre kan påvirke deres ydeevne på små byte-adresserbare processorer og mikrocontrollere.
Men, high-performance processorer normalt hente typisk multi-byte operander fra hukommelsen i den samme mængde tid, de ville have hentet en enkelt byte, så kompleksiteten af hardware er ikke påvirket af byte ordering.
Operationer, der starter ved den mindst betydende digitEdit
Som læres i skolen, addition, subtraktion, multiplikation start på mindst betydende ciffer position og udbrede bære til den efterfølgende mere markant position.,Adressering af flercifrede data ved sin første (=mindste adresse) byte er den overvejende adresseringsordning.Når denne første byte indeholder det mindst signifikante ciffer-hvilket svarer til lille endianness, er implementeringen af disse operationer marginalt enklere.
operationer, der starter ved den mest signifikante digitEdit
sammenligning og division starter ved det mest signifikante ciffer og udbreder en mulig overførsel til de efterfølgende mindre signifikante cifre., For numeriske værdier med fast længde (typisk af længde 1,2,4,8,16) er implementeringen af disse operationer marginalt enklere på big-endian-maskiner.
operander af varierende længderedit
i programmeringssproget C skal den leksikografiske sammenligning af tegnstrenge udføres ved hjælp af subrutiner, som ofte tilbydes og implementeres som en subrutine (f. eks. strcmp).mange big-endian-processorer indeholder hard .areinstruktioner til leksikografisk sammenligning af tegnstrenge med forskellig længde (f. eks. IBM-systemet/360 og dets efterfølgere).,
operationer uden impactEdit
den normale datatransport ved en tildeling erklæring er i princippet uafhængig af endianness af processoren.
Middle-endiandit
talrige andre bestillinger, generisk kaldet middle-endian eller mi .ed-endian, er mulige. Et sådant eksempel uden for datalogi er standard amerikansk datoformatering af Måned / Dag / År.
PDP-endiandit
PDP-11 er i princippet et 16-bit little-endian-system., Vejledningen at konvertere mellem floating-point og tal i den valgfri floating-point-processor på PDP-11/45, PDP-11/70, og i nogle nyere processorer, der er gemt 32-bit “double precision integer long” værdier med 16-bit halverer byttet fra det forventes, little-endian for. UNI.C-kompilatoren brugte det samme format til 32-bit lange heltal. Denne bestilling er kendt som PDP-endian.
en måde at fortolke denne endianness på er, at den gemmer et 32-bit heltal som to 16-bit ord i big-endian, men selve ordene er little-endian (f.eks., “jag cog sin” would be “gaj goc nis”):
increasing addresses → | |||||
0Bh | 0Ah | 0Dh | 0Ch | ||
0A0Bh | 0C0Dh |
16-bit værdierne henviser her til deres numeriske værdier, ikke deres faktiske layout.
Honeywell Serie 16Edit
Honeywell Serie 16 16-bit-computere, herunder Honeywell 316, er det modsatte af PDP-11 i lagring af 32-bit ord i C., It stores each 16-bit word in big-endian order, but joins them together in little-endian manner:
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.