HistoryEdit
Monet historiallinen ja säilynyt prosessorit käyttää big-endian muistiin edustus, joko yksinomaan tai muotoilu vaihtoehto. Big-endian muisti edustus on yleisesti kutsutaan verkkojärjestys, kuten käytetään Internet protocol suite. Muita prosessori tyypit käyttää little endian muistiin edustus; toiset käyttävät vielä toinen järjestelmä, nimeltään ”keski-endian”, ”mixed-endian” tai ”PDP-11-endian”.
IBM System/360 käyttää big-endian-tavujärjestyksessä, samoin kuin sen seuraajille System/370, ESA/390, z/Architecture., PDP-10 käyttää myös big-endian-osoitetta tavukeskeisiin ohjeisiin. IBM Series / 1 minicomputer käyttää myös big-endian byte-tilausta.
erilaisten endianness-tietojen käsittelystä käytetään joskus nimitystä NUXI-ongelma. Tämä terminologia viittaa tavun jotta konfliktit kohdataan ja samalla mukauttaa UNIX, joka juoksi mixed-endian PDP-11, iso endian IBM-Sarja/1-tietokone. Unix oli ensimmäisiä järjestelmiä, jotta sama koodi laadittava alustoilla erilaisia sisäisiä esityksiä., Yksi ensimmäisistä ohjelmista muuntaa piti tulostaa Unix
, mutta Sarja/1 painettu nUxi
sen sijaan.
Datapoint 2200 käyttää yksinkertaista bit-sarja logiikka little-endian helpottaa kuljettaa eteneminen. Kun Intel kehitti 8008 mikroprosessori Datapoint, he käyttivät ”little endian” -yhteensopivuuden., Kuitenkin, koska Intel ei kyennyt toimittamaan 8008 ajoissa, Datapoint käytetään medium scale integration vastaava, mutta pikku-endianness oli säilytetty useimmissa Intel malleja, kuten MCS-48 ja 8086 ja sen x86 seuraajat. DEC Alpha, Atmel AVR, VAX, the 6502 MOS Technology perhe (mukaan lukien Länsi Design Center 65802 ja 65C816), että Zilog Z80 (mukaan lukien Z180 ja eZ80), Altera Nios II, ja monet muut prosessorit ja prosessori perheet ovat myös little endian.
Motorola 6800 / 6801, 6809 ja 68000-sarjan suorittimet käyttivät big-endian-formaattia.,
Intel 8051, toisin kuin muut Intel-prosessorit, odottaa 16-bit osoitteet LJMP ja LCALL big-endian-muodossa; kuitenkin, xCALL ohjeet säilytä paluuosoite pinoon little-endian-muodossa.
SPARC historiallisesti käyttää big-endian kunnes versio 9, joka on bi-endian; samoin alussa IBM POWER-prosessorit olivat big-endian, mutta PowerPC-ja Power ISA jälkeläiset ovat nyt bi-endian. ARM-arkkitehtuuri oli vähän-endialaista ennen versiota 3, Kun siitä tuli bi-endian.,
Nykyinen architecturesEdit
Intel x86 ja AMD64 / x86-64-sarjan prosessorit käyttää little-endian-muodossa. Muut käskykanta arkkitehtuurit, jotka noudattavat tämän yleissopimuksen, jolloin vain little endian-tilassa, kuuluu Nios II, Andien Teknologia-NDS32, ja Qualcomm Kuusikulmio.
Jotkut käskykanta arkkitehtuurit mahdollistavat käynnissä ohjelmisto, joko endianness bi-endian arkkitehtuuri. Näihin kuuluvat ARM AArch64, C-Sky, Power ISA ja RISC-V.,
Vain big-endian arkkitehtuurien ovat IBM: n z/Arkkitehtuuri, Freescale ColdFire (joka on Motorolan 68000-sarjan-pohjainen), Atmel AVR32, ja OpenRISC. IBM AIX-ja Oracle Solaris käyttöjärjestelmiä, bi-endian Teho ISA ja SPARC ajaa big-endian-tilassa; jotkut Linux-jakeluissa Valtaa on siirretty pikku-endian-tilassa.,
Bi-endiannessEdit
Jotkut arkkitehtuurit (mukaan lukien ARM-versiot 3 ja edellä, PowerPC, Alpha, SPARC V9, MIPS, PA-RISC, SuperH SH-4 ja IA-64) – toiminnon asetus, joka mahdollistaa kytkettävissä endianness data hakee ja tallentaa, opetusta hakee, tai molemmat. Tämä ominaisuus voi parantaa suorituskykyä tai yksinkertaistaa logiikkaa verkottumisen laitteiden ja ohjelmistojen. Sana bi-endian, kun sanoi, laitteisto, tarkoittaa kykyä koneen laskea tai välittää tietoja joko endian-muodossa.,
Monet näistä arkkitehtuureista voi olla kytketty kautta ohjelmisto oletuksena tiettyyn endian-muodossa (yleensä tapahtuu, kun tietokone käynnistyy); kuitenkin joissakin järjestelmissä default endianness on valittu laitteisto emolevy, eikä sitä voi muuttaa kautta ohjelmisto (esim. Alpha, joka toimii vain big-endian-tilassa Cray T3E).
Huomaa, että termi ”bi-endian” viittaa ensisijaisesti siihen, miten prosessori käsittelee tietoja käyttää., Opetus-kutsuja (hakee opetus-sanat) on antanut prosessori voi edelleen olettaa, kiinteä endianness, vaikka datan käsittelyyn ovat täysin bi-endian, vaikka tämä ei aina tapahdu, kuten Intelin IA-64-pohjainen Itanium-SUORITTIMEN, joka mahdollistaa molemmat.
Huomaa myös, että jotkut nimellisesti bi-endian-Prosessorit vaativat emolevy auttaa täysin vaihtaa endianness., Esimerkiksi 32-bittinen työpöydän suuntautunut PowerPC-prosessorit little-endian-tilassa toimivat little endian näkökulmasta, että täytäntöönpanovaltion ohjelmia, mutta ne vaativat emolevy suorittaa 64-bit swap kaikissa 8 tavun kaistaa varmistaa, että little-endian tarkastella asioita sovelletaan I/O-laitteita. Tämän epätavallisen emolevy-laitteiston puuttuessa laiteohjainohjelmiston on kirjoitettava eri osoitteisiin epätäydellisen muodonmuutoksen kumoamiseksi ja myös suoritettava normaali tavu swap.,
jotkut suorittimet, kuten monet sulautettuun käyttöön tarkoitetut PowerPC-suorittimet ja lähes kaikki SPARC-suorittimet, mahdollistavat sivullisen endiannessin valinnan.
SPARC processors 1990-luvun lopulla (”SPARC v9” – yhteensopiva prosessorit) sallia tietojen endianness valitaan kunkin yksittäisen opetusta, joka lataa tai tallentaa muistiin.
ARM arkkitehtuuri tukee kaksi big-endian-tilat, nimeltään BE-8 ja OLLA-32. Suorittimet ARMv5: een asti tukevat vain BE-32-tai Word-Invariant-moodia., Täällä kaikki luonnollisesti linjassa 32-bittinen-yhteys toimii kuten little endian-tilassa, mutta pääsy tavu tai 16-bittinen sana ohjataan vastaava osoite ja puolueeton käyttö ei ole sallittua. ARMv6 esitellään OLLA-8 tai Tavu-Invariant tilassa, jossa pääsy yhden tavun toimii kuten little endian-tilassa, mutta päästä 16-bit, 32-bit tai (alkaen ARMv8) 64-bittinen sana tulokset tavu swap tiedot. Tämä yksinkertaistaa unaligned muisti access sekä muisti kartoitettu pääsy rekistereihin kuin 32 bit.,
Monet jalostajat ovat ohjeet voit muuntaa word-rekisteriin vastakkaiseen endianness, että on, ne vaihtaa järjestystä tavua 16-, 32 – tai 64-bittinen sana. Kaikki yksittäiset bitit eivät kuitenkaan ole päinvastaisia.
Viime Intel x86 ja x86-64-arkkitehtuurin Suorittimia on MOVBE ohje (Intel Core koska sukupolvi 4, kun Atom), joka hakee big-endian-muodossa sana muistista tai kirjoittaa sanan muistiin big-endian-muodossa. Nämä suorittimet ovat muuten läpikotaisin vähän-endialaisia., Heillä on myös jo useita swap-ohjeet kääntää tavu järjestyksessä rekisterien sisällön, kuten silloin, kun sanoja on jo haettu muistista paikoissa, joissa he olivat ”väärän” endianness.
Kelluva pointEdit
Vaikka arjen x86-prosessorit käyttävät nykyään pikku-endian tallennustilaa kaikki tietotyyppejä (kokonaisluku, liukuluku), on olemassa useita laitteisto arkkitehtuurit, jossa floating-point numerot ovat edustettuina big-endian muodossa, kun kokonaisluvut ovat edustettuina little endian-muodossa., On olemassa ARM-suorittimia, jotka ovat puoli little endian, puoli big-endian floating-point esitys kaksinkertaisen tarkkuuden lukuja: sekä 32-bittinen sanat tallennetaan little endian, kuten kokonaisluku rekistereihin, mutta merkittävin yksi ensin. Koska on ollut monia liukulukuja formaatteja o ”verkko” standardi edustus heille, XDR-standardi käyttää big-endian IEEE 754, koska sen edustus. Se voi siksi vaikuttaa oudolta, että laajalle levinnyt IEEE 754 liukuluku standardi ei määritä endianness., Teoriassa tämä tarkoittaa sitä, että edes yhden koneen kirjoittama standardi IEEE-kelluntapistetieto ei välttämättä ole toisen luettavissa. Kuitenkin moderni standardi tietokoneita (toisin sanoen täytäntöönpanoon IEEE 754), voidaan käytännössä olettaa, että endianness on sama liukulukuina kuten kokonaislukuja, jolloin muuntaminen suoraviivainen riippumatta tietojen tyypin. (Pienet sulautetut järjestelmät, joissa käytetään erityisiä liukupistemuotoja, voivat kuitenkin olla toinen asia.,)
pituus vaihtelee dataEdit
Useimmat ohjeet pitää toistaiseksi olla kokoa (pituutta) sen operandit sisällä toimenpide-koodi. Usein saatavilla operandi pituudet ovat 1, 2, 4, 8 tai 16 tavua.Mutta on myös arkkitehtuurit, jossa pituus operandi voidaan pitää erillisessä alan opetusta tai operandi itse, esim. g. avulla sanamerkki. Tällainen lähestymistapa mahdollistaa operandin pituudet jopa 256 tavua tai jopa täyden muistin koon.Tällaisten operandien tietotyypit ovat merkkijonot tai BCD.,
OptimizationEdit
pikku-endian järjestelmä on ominaisuus, että sama arvo voidaan lukea muistista eri pituudet ilman eri osoitteita (vaikka alignment-rajoitukset). Esimerkiksi 32-bittistä muistipaikkaa, joiden sisältö 4A 00 00 00
voidaan lukea samaan osoitteeseen kuin joko 8-bittinen (arvo = 4 A), 16-bit (004A), 24-bittinen (00004A), tai 32-bittinen (0000004A), jotka kaikki säilyttää sama numeerinen arvo., Vaikka tämä pikku-endian omaisuutta käytetään harvoin suoraan korkean tason ohjelmoijat, se on usein palveluksessa koodin optimointi sekä assembly kieli ohjelmoijat.
käytännössä tällaisia optimointeja ovat vastaa seuraavista C koodi palaa totta useimmissa pikku-endian-järjestelmät:
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");
Vaikka ei sallittu C++, tällainen tyyppi punning koodi on sallittu ”implementation-defined”, jonka C11 standardi ja yleisesti käytetty koodi vuorovaikutuksessa laitteisto.,
toisaalta, joissakin tilanteissa se voi olla hyödyllistä saada likiarvo multi-tavu-tai multi-sana arvo lukemalla vain sen merkittävin osa sen sijaan täydellinen edustus; big-endian prosessori voi lukea tällainen arvio käyttäen samaa pohja-osoite, jota käytettäisiin koko arvoa.
tämänkaltaiset optimoinnit eivät ole kannettavia eri endianness-järjestelmissä.
Laskelma orderEdit
Joidenkin toimintojen sijoitteluun useita järjestelmiä on luonnollinen tai ensisijainen järjestyksessä, jossa peruskoulun vaiheet ovat toteutetaan.,Tämä tilaus voi vaikuttaa niiden suorituskykyyn pienimuotoisilla tavutunnistettavilla prosessoreilla ja mikrokontrollereilla.
Kuitenkin, korkean suorituskyvyn prosessorit yleensä noutaa tyypillinen multi-tavu operandit muistista saman verran aikaa he olisi haettu yhden tavun, joten monimutkaisuus laitteisto ei vaikuta tavun tilaaminen.
Toiminnot alkavat ainakin merkittävä digitEdit
Kuten oppinut koulussa, yhteen -, vähennys -, ja kertolasku aloittaa vähiten merkitsevän numeron kanta ja levittää kantaa myöhemmin merkittävämpi asema.,Moninumeroisten tietojen käsittely ensimmäisessä (= pienin osoite) tavussa on vallitseva osoitejärjestelmä.Kun tämä ensimmäinen tavu sisältää vähiten merkitsevän numeron joka vastaa pikku-endianness, niin täytäntöönpano nämä toiminnot on hieman yksinkertaisempi.
Toiminta alkaen kaikkein merkittäviä digitEdit
Vertailu ja jako alkaa klo useimmat merkittäviä numero ja levittää mahdollista tehdä myöhemmin vähemmän merkitsevää numeroa., Kiinteän pituuden numeerisissa arvoissa (tyypillisesti pituus 1,2,4,8,16) näiden operaatioiden toteuttaminen on marginaalisesti yksinkertaisempaa big-endian-koneissa.
Operandit vaihtelevia lengthEdit
Vuonna ohjelmointikieli C sanakirjamaisia vertailu merkkijonojen on tehtävä aliohjelmia, joka on usein tarjotaan ja toteutetaan ohjelman (esim. g. strcmp).
Monet big-endian-prosessorit sisältävät laitteisto-ohjeet kirjaimet verrataan eri pituisten merkkijonojen (esim. g. IBM System/360: n ja sen seuraajien).,
Toiminnot ilman impactEdit
normaali tiedot liikenteen sijoituslause on periaatteessa riippumaton endianness prosessori.
Keski-endianEdit
Lukuisia muita orderings, joita yleisesti kutsutaan lähi-endian-tai mixed-endian, ovat mahdollisia. Yksi tällainen esimerkki tietojenkäsittelytieteen ulkopuolella on tavallinen amerikkalainen päivämäärämuotoilu Kuukausi/Päivä/Vuosi.
PDP-endianEdit
PDP-11 on periaatteessa 16-bittinen little-endian järjestelmä., Ohjeet muuntaa liukulukuja ja kokonaisluku arvoja valinnainen liukuluku prosessori PDP-11/45, PDP-11/70, ja jotkut myöhemmin prosessorit, tallentaa 32-bit ”double precision kokonaisluku pitkä” arvot 16-bittinen puolikkaat vaihdettu odotettu pikku-endian järjestyksessä. UNIX C-kääntäjä käytti samaa muotoa 32-bittisille pitkille kokonaisluvuille. Tämä tilaus tunnetaan nimellä PDP-endian.
Yksi tapa tulkita tämä endianness on, että se tallentaa 32-bittinen kokonaisluku kuin kaksi 16-bittisiä sanoja big-endian, mutta sanat ovat itse pikku-endian (esim., ”jag cog sin” would be ”gaj goc nis”):
increasing addresses → | |||||
0Bh | 0Ah | 0Dh | 0Ch | ||
0A0Bh | 0C0Dh |
16-bittisiä arvoja tänne viittaavat niiden numeerisia arvoja, ei niiden todellinen layout.
Honeywell-Sarja 16Edit
Honeywell-Sarja 16 16-bittiset tietokoneet, mukaan lukien Honeywell 316, ovat vastakohta PDP-11 tallentamiseen 32-bit sanoja 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.