HistoryEdit
sok történelmi és fennmaradt processzor használ big-endian memória ábrázolást, akár kizárólag, akár tervezési opcióként. A Big-endian memória ábrázolását általában hálózati megrendelésnek nevezik, amint azt az Internet protocol suite-ban használják. Más processzortípusok kevéssé endian memóriareprezentációt használnak; mások még egy “közép-endian”, “vegyes-endian” vagy “PDP-11-endian”nevű sémát használnak.
az IBM System / 360 big-endian bájtrendet használ, akárcsak a/370, ESA/390 és Z/Architecture utódai., A PDP-10 is használ big-endian címzés byte-orientált utasításokat. Az IBM Series / 1 miniszámítógép big-endian bájtrendelést is használ.
a különböző endianness adatainak kezelését néha NUXI problémának nevezik. Ez a terminológia utal a byte rend konfliktusok során felmerült adaptálása UNIX, ami futott a vegyes endian PDP-11, egy big-endian IBM Series/1 Számítógép. Unix volt az egyik első rendszer, amely lehetővé tette ugyanazt a kódot kell összeállítani platformok különböző belső reprezentációk., Az első átalakított programok közül az egyiknek ki kellett nyomtatnia a Unix
, de a/1 sorozaton nuxi
nyomtatta.
a Datapoint 2200 egyszerű bit-soros logikát használ a little-endian segítségével a hordozás terjedésének megkönnyítése érdekében. Amikor az Intel kifejlesztette a 8008 mikroprocesszort a Datapoint számára, a kompatibilitáshoz kevés endian-t használtak., Azonban, mint az Intel nem volt képes átadni a 8008 időben, Klikkelve használt medium scale integration egyenértékű, de a kis-endianness maradt meg a legtöbb Infót tervez, beleértve az MCS-48 a 8086, valamint az x86 utódai. A DEC Alpha, Atmel AVR, VAX, a MOS Technology 6502 család (beleértve a Western Design Center 65802 és 65C816), a Zilog Z80 (beleértve a Z180 és eZ80), az Altera Nios II, és sok más processzorcsaládok is kis-endian.
a Motorola 6800 / 6801, a 6809 és a 68000 sorozatú processzorok a big-endian formátumot használták.,
Az Intel 8051, ellentétben más Intel processzorokkal, 16 bites címeket vár az LJMP és az LCALL számára big-endian formátumban; az xCALL utasítások azonban a visszatérési címet kis-endian formátumban tárolják a veremre.
SPARC történelmileg használt big-endian, amíg a 9-es verzió, amely a bi-endian; hasonlóképpen a korai IBM POWER processzorok voltak big-endian, de a PowerPC Hatalom ISA leszármazottai most bi-endian. Az ARM architektúra kicsi volt-endian a 3. verzió előtt, amikor bi-endian lett.,
jelenlegi architektúrákszerkesztés
Az Intel x86 és AMD64 / x86-64 sorozatú processzorok a little-endian formátumot használják. Más utasításkészlet-architektúrák, amelyek ezt az egyezményt követik, csak kis endian módot tesznek lehetővé, a Nios II, az Andes Technology NDS32 és a Qualcomm Hexagon.
néhány utasításkészlet-architektúra lehetővé teszi az endianness szoftver futtatását egy bi-endian architektúrán. Ide tartozik az ARM AArch64, a C-Sky, a Power ISA és a RISC-V.,
kizárólag big-endian architektúrák közé tartozik az IBM z/Architecture, Freescale ColdFire (ami Motorola 68000 series-alapú), Atmel AVR32, és OpenRISC. Az IBM AIX és Oracle Solaris operációs rendszerek bi-endian Power ISA és SPARC fut big-endian módban; néhány disztribúció a Linux on Power költözött little-endian módban.,
Bi-endiannessEdit
Néhány architektúra (beleértve a KARJÁT verziók 3 felett, PowerPC, Alfa, V9 SPARC, MIPS, PA-RISC, SuperH SH-4 IA-64) funkció beállítás, amely lehetővé teszi kapcsolható endianness data tölti le, illetve tárolja, használati tölti le, vagy mindkettő. Ez a funkció javíthatja a teljesítményt, vagy egyszerűsítheti a hálózati eszközök és szoftverek logikáját. A bi-endian szó, amikor a hardverről beszélünk, azt jelenti, hogy a gép képes kiszámítani vagy átadni az adatokat endian formátumban.,
sok ilyen architektúrák lehet kapcsolni a szoftver alapértelmezett egy adott endian formátumban (általában akkor történik, amikor a számítógép elindul); azonban egyes rendszereken az alapértelmezett endianness van kiválasztva hardver az alaplapon, és nem lehet megváltoztatni a szoftver (például az Alpha, amely fut csak big-endian módban a Cray T3E).
vegye figyelembe, hogy a “bi-endian” kifejezés elsősorban arra utal, hogy egy processzor hogyan kezeli az adatokhoz való hozzáférést., Egy adott processzoron az utasításhoz való hozzáférés (az utasításszavak lekérése) továbbra is rögzített endiannesst feltételezhet, még akkor is, ha az adatokhoz való hozzáférés teljesen bi-endian, bár ez nem mindig így van, például az Intel IA-64 alapú Itanium CPU-ján, amely mindkettőt lehetővé teszi.
vegye figyelembe azt is, hogy néhány névlegesen bi-endian CPU-nak alaplapi segítségre van szüksége az endianness teljes váltásához., Például a 32 bites asztali-orientált PowerPC processzorok kis endian módban a végrehajtó programok szempontjából kevéssé endiálisak, de megkövetelik az alaplaptól, hogy 64 bites swap-ot hajtson végre mind a 8 bájtsávon, hogy a dolgok kis-endiai nézete az I/O eszközökre vonatkozzon. Ennek a szokatlan alaplapi hardvernek a hiányában az eszközillesztő szoftvernek különböző címekre kell írnia a hiányos átalakítás visszavonásához, valamint normál bájtcserét kell végrehajtania.,
egyes CPU-k, mint például a beágyazott használatra szánt PowerPC processzorok és szinte az összes SPARC processzor, lehetővé teszik az endianness oldalonkénti kiválasztását.
SPARC processzorok az 1990-es évek vége óta (“SPARC v9” kompatibilis processzorok) lehetővé teszik az adatok endiannessének kiválasztását minden egyes utasítással, amely a memóriából vagy a tárolókból töltődik be.
az ARM architektúra két big-endian módot támogat, a BE-8-at és a BE-32-t. Az ARMv5-ig terjedő CPU-k csak a BE-32 vagy a Word-invariáns módot támogatják., Itt minden természetesen igazított 32 bites hozzáférés úgy működik, mint a little-endian módban, de a byte vagy a 16 bites szóhoz való hozzáférés átirányításra kerül a megfelelő címre, az igazítás nélküli hozzáférés nem engedélyezett. Az ARMv6 bevezeti a BE-8 vagy Byte-invariáns módot, ahol egyetlen byte-hoz való hozzáférés úgy működik, mint a little-endian módban, de a 16 bites, 32 bites vagy (az ARMv8-tól kezdve) 64 bites word elérése az adatok bájtcseréjét eredményezi. Ez egyszerűsíti a nem hozzárendelt memória hozzáférést, valamint a memória leképezett hozzáférést a 32 bites regiszterekhez.,
sok processzornak utasításai vannak arra, hogy egy regiszterben egy szót az ellenkező endiannessre konvertáljanak, vagyis a bájtok sorrendjét egy 16, 32 vagy 64 bites Wordben cserélik. Az egyes biteket azonban nem fordítják meg.
a legújabb Intel x86 és x86-64 architektúrájú CPU-k rendelkeznek MOVBE utasítással (Intel Core a 4.generáció óta, az Atom után), amely egy big-endian formátumú szót lekér a memóriából, vagy egy szót ír a memóriába big-endian formátumban. Ezek a processzorok egyébként alaposan kis endian., Már rendelkeztek egy sor swap-utasítással is, hogy megfordítsák a regiszterek tartalmának bájtsorrendjét, például amikor a szavakat már lekérték a memóriahelyekről, ahol “rossz” endiannessben voltak.
Lebegő pointEdit
Bár a mindennapok x86-os processzorok a ma használt kis-endian tároló minden típusú adatok (egész, lebegőpontos), számos architektúrák, ahol a lebegőpontos számok képviselik a big-endian formája, miközben egész számok képviselik a kis-endian formában., Vannak ARM processzorokkal, hogy a fél little-endian, fél big-endian lebegőpontos ábrázolás, dupla pontosságú számok: mind a 32-bites szavak tárolt little-endian, mint egész nyilvántartások, de a legfontosabb az első. Mivel sok lebegőpontos formátum létezik ,amelyeknek nincs” hálózati ” szabványos ábrázolása, az XDR szabvány a big-endian IEEE 754-et használja reprezentációként. Ezért furcsának tűnhet, hogy a széles körben elterjedt IEEE 754 lebegőpontos szabvány nem határozza meg az endiannesst., Elméletileg ez azt jelenti, hogy még az egyik gép által írt szabványos IEEE lebegőpontos adatok sem olvashatók a másik által. Azonban a modern szabványos számítógépeken (azaz az IEEE 754 végrehajtásakor) a gyakorlatban biztonságosan feltételezhetjük, hogy az endianness megegyezik a lebegőpontos számokkal, mint az egész számokkal, így az átalakítás az adattípustól függetlenül egyszerű. (A speciális lebegőpontos formátumokat használó kis beágyazott rendszerek azonban más kérdés lehetnek.,)
változó hosszúságú adatszerkesztés
az eddig figyelembe vett legtöbb utasítás tartalmazza operandusainak méretét (hosszát) a műveleti kódon belül. A gyakran elérhető operandus hossza 1, 2, 4, 8 vagy 16 bájt.De vannak olyan architektúrák is, ahol egy operandus hossza az utasítás külön mezőjében vagy magával az operandussal, pl. egy szójel segítségével tartható. Ez a megközelítés lehetővé teszi az operandus hosszát akár 256 bájtig, vagy akár a teljes memória méretét.Az ilyen operandusok adattípusai karakterláncok vagy BCD.,
OptimizationEdit
a kis endian rendszernek az a tulajdonsága, hogy ugyanaz az érték különböző hosszúságú memóriából olvasható különböző címek használata nélkül (még akkor is, ha igazítási korlátozásokat írnak elő). Például egy 32 bites memóriahely, amelynek tartalma 4A 00 00 00
olvasható ugyanazon a címen, mint a 8 bites (érték = 4a), a 16 bites (004A), a 24 bites (0004A) vagy a 32 bites (000004a), amelyek mindegyike megtartja ugyanazt a numerikus értéket., Bár ezt a kis endian tulajdonságot ritkán használják közvetlenül a magas szintű programozók, gyakran alkalmazzák a kódoptimalizálók, valamint az assembly language programozók.
több konkrét feltételek, ilyen optimalizáció a megfelelője a következő C kód visszatérő igaz, a legtöbb little-endian rendszer:
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");
Amíg nem engedélyezett, a C++, az ilyen típusú punning kód engedélyezett, mint a “végrehajtás meghatározott” a C11 szabvány általánosan használt kód kölcsönhatásban hardver.,
másrészről, bizonyos helyzetekben hasznos lehet egy többbájtos vagy többszavas érték közelítése, ha csak a legfontosabb részét olvassa el a teljes ábrázolás helyett; egy nagy endian processzor elolvashat egy ilyen közelítést ugyanazon alapcím használatával, amelyet a teljes értékhez használnának.
Az ilyen optimalizálások nem hordozhatók különböző endianness rendszereken.
számítási sorrendszerkesztés
a helyzeti számrendszerekben végzett egyes műveleteknek természetes vagy előnyben részesített sorrendje van, amelyben az elemi lépéseket végre kell hajtani.,Ez a sorrend befolyásolhatja a teljesítményüket kis méretű byte-címezhető processzorokon és mikrokontrollereken.
Azonban nagy teljesítményű processzorok általában hozza a tipikus multi-byte operandusok a memória ugyanannyi időt volna túlzás egyetlen byte, tehát a komplexitás, a hardver nem befolyásolja a byte rendel.
A legalább jelentős digitEdit
– nél kezdődő műveletek az iskolában tanult módon, összeadás, kivonás és szorzás a legalább jelentős számjegyhelyzetben kezdődnek, és a hordozást a későbbi jelentősebb pozícióba terjesztik.,A többjegyű adatok kezelése az első (=legkisebb cím) bájtnál az elsődleges címzési rendszer.Ha ez az első bájt tartalmazza a legkevésbé jelentős számjegyet – ami megegyezik a kis-endiannesstel, akkor ezeknek a műveleteknek a végrehajtása kissé egyszerűbb.
A legjelentősebb digitEdit
összehasonlításnál és osztásnál kezdődő műveletek a legjelentősebb számjegynél kezdődnek, és egy lehetséges hordozót továbbítanak a későbbi, kevésbé jelentős számjegyekre., A rögzített hosszúságú numerikus értékek (jellemzően 1,2,4,8,16 hosszúságú) esetében ezeknek a műveleteknek a végrehajtása kissé egyszerűbb a big-endian gépeken.
különböző hosszúságú Operandusokszerkesztés
A C programozási nyelvben a karakterláncok lexikográfiai összehasonlítását szubrutinokkal kell elvégezni, amelyeket gyakran szubrutinként kínálnak és valósítanak meg (pl. strcmp).
sok big-endian processzor tartalmaz hardveres utasításokat a különböző hosszúságú karakterláncok (pl. az IBM System/360 és utódai) lexikográfiailag történő összehasonlításához.,
impactEdit nélküli műveletek
a hozzárendelési nyilatkozattal történő normál adatátvitel elvben független a processzor endiannessétől.
Middle-endianEdit
számos más rendezés, általában Közép-endian vagy vegyes-endian, lehetséges. Az egyik ilyen példa a számítástechnikán kívül a hónap/nap/év szokásos amerikai dátumformázása.
PDP-endianEdit
a PDP-11 elvileg egy 16 bites kis endian rendszer., Az utasításokat átalakítani között lebegőpontos pedig egész értékeket a választható lebegőpontos processzor a PDP-11/45, PDP-11/70, sőt, néhány későbbi feldolgozók, tárolt, 32-bit “dupla pontosságú egész hosszú” értékek a 16-bites fél kicserélte a várható little-endian érdekében. A UNIX C fordító ugyanazt a formátumot használta a 32 bites hosszú egész számokhoz. Ez a megrendelés PDP-endian néven ismert.
ennek az endiannessnek az értelmezésének egyik módja az, hogy egy 32 bites egész számot két 16 bites szóként tárol big-endi nyelven, de maguk a szavak kevéssé endiálisak (pl., “jag cog sin” would be “gaj goc nis”):
increasing addresses → | |||||
0Bh | 0Ah | 0Dh | 0Ch | ||
0A0Bh | 0C0Dh |
a 16 bites értékek itt a numerikus értékekre vonatkoznak, nem pedig a tényleges elrendezésükre.
Honeywell Series 16edit
A Honeywell Series 16 16 bites számítógépei, beleértve a Honeywell 316-ot is, ellentétesek a PDP-11-vel a 32 bites szavak C-ben tárolásakor., 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.