HistoryEdit
Mnoho historických a existující procesory použít big-endian paměť zastoupení, a to buď výlučně, nebo jako volbu designu. Reprezentace paměti Big-endian se běžně označuje jako síťový řád, jak se používá v sadě internetového protokolu. Jiné typy procesorů používají reprezentaci paměti little-endian; jiní používají další schéma nazvané „middle-endian“, „mixed-endian“nebo“ PDP-11-endian“.
IBM System / 360 používá big-endian byte order, stejně jako jeho nástupci System / 370, ESA / 390 a z / Architecture., PDP – 10 také používá big-endian adresování pro bajtově orientované instrukce. Minipočítač IBM Series / 1 také používá příkaz big-endian byte.
zabývající se daty různých endianness se někdy nazývá NUXI problém. Tato terminologie se zmiňuje o konfliktech v řádu bajtů, ke kterým došlo při adaptaci Unixu, který běžel na smíšeném endian PDP-11, na velký endian IBM Series/1 počítač. Unix byl jedním z prvních systémů, který umožnil kompilovat stejný kód pro platformy s různými interními reprezentacemi., Jedním z prvních programů, převedeny měl vytisknout Unix
, ale na Série/1 vytištěno nUxi
místo.
Datapoint 2200 používá jednoduchou bitovou sériovou logiku s little-endian pro usnadnění šíření přenosu. Když Intel vyvinul mikroprocesor 8008 pro Datapoint, použili pro kompatibilitu little endian., Nicméně, jak Intel nebyl schopen dodat 8008 v době, Datapoint použity středně velké integrace ekvivalent, ale little-endian byl zachován ve většině Intel vzory, včetně MCS-48 a 8086 a jeho x86 nástupci. DEC Alpha, Atmel AVR, VAX, MOS Technology 6502 rodiny (včetně Western Design Center 65802 a 65C816), Zilog Z80 (včetně Z180 a eZ80), Altera Nios II, a mnoho dalších procesorů a procesorů rodiny jsou také little-endian.
řada procesorů Motorola 6800 / 6801, 6809 a 68000 používaly formát big-endian.,
Intel 8051, na rozdíl od ostatních Intel procesorů, očekává, že 16-bitové adresy pro LJMP a LCALL v big-endian formátu; nicméně, xCALL pokyny uložit návratovou adresu do zásobníku v little-endian formátu.
SPARC historicky používá big-endian do verze 9, která je bi-endian; podobně brzy IBM POWER procesory byly big-endian, ale PowerPC a Power ISA potomci jsou nyní bi-endian. Architektura ARM byla malá endian před verzí 3, když se stala bi-endian.,
současná architekturaedit
řada procesorů Intel x86 a AMD64 / x86-64 používají formát little-endian. Další instrukční sady architektur, které následují této úmluvy, který umožňuje pouze little-endian režimu, patří Nios II, Andách Technologie NDS32, a Qualcomm Šestiúhelníku.
některé architektury sady instrukcí umožňují spuštění softwaru buď endianness na bi-endian architektuře. To zahrnuje ARM AArch64, C-Sky, Power ISA a RISC-V.,
pouze architektury big-endian zahrnují IBM z / Architecture, Freescale ColdFire (který je založen na sérii Motorola 68000), Atmel AVR32 a OpenRISC. Operační systémy IBM Aix a Oracle Solaris na bi-endian Power ISA a SPARC běží v režimu big-endian; některé distribuce Linuxu na napájení se přesunuly do režimu little-endian.,
Bi-endiannessEdit
Některé architektury (včetně ARM verze 3 a vyšší, PowerPC, Alpha, SPARC V9, MIPS, PA-RISC, SuperH SH-4 a IA-64), funkce a nastavení, které umožňuje přepínatelné endian v data načítá a ukládá, instrukce načte, nebo obojí. Tato funkce může zlepšit výkon nebo zjednodušit logiku síťových zařízení a softwaru. Slovo bi-endian, když se řekne o hardwaru, označuje schopnost stroje vypočítat nebo předat data v obou endian formátu.,
Mnoho z těchto architektur lze přepínat pomocí softwaru na výchozí na konkrétní endian formátu (obvykle při spuštění počítače); nicméně, v některých systémech výchozí endian je vybrán hardware na základní desce a nelze ji změnit pomocí software (např. Alfa, který běží pouze v big-endian režimu na Cray T3E).
všimněte si, že termín „bi-endian“ odkazuje především na to, jak procesor zachází s přístupy k datům., Návod přistupuje (načte instrukčních slov) na dané procesor může stále předpokládat, pevné endian, i když data přistupuje jsou plně bi-endian, i když to není vždy případ, jako na Intel IA-64 Itanium PROCESOR, který umožňuje obojí.
Všimněte si také, že některé nominálně bi-endian procesory vyžadují základní desku pomoci plně přepnout endianness., Například, 32-bitové desktop-orientovaný PowerPC procesory v little-endian režimu zákona jako „little-endian“ z hlediska provádění programů, ale oni vyžadují základní deska provádět 64-bit vyměnit všech 8 byte pruhy, aby zajistily, že little-endian pohled na věci se bude vztahovat na I/O zařízení. Při absenci tohoto neobvyklého hardwaru základní desky musí software ovladače zařízení zapisovat na různé adresy, aby zrušil neúplnou transformaci, a také musí provést normální výměnu bajtů.,
některé procesory, jako je mnoho procesorů PowerPC určených pro vestavěné použití a téměř všechny procesory SPARC, umožňují volbu endianness na stránce.
SPARC procesory od pozdní 1990 („SPARC v9“ kompatibilní procesory) umožňují údaje endian být vybrán s každou individuální výuky, která se načte z, nebo ukládá do paměti.
architektura ARM podporuje dva režimy big-endian, nazývané BE-8 a BE-32. Procesory až do ARMv5 podporují pouze režim BE – 32 nebo Word-Invariant., Tu přirozeně zarovnány na 32-bitový přístup funguje jako v little-endian režimu, ale přístup k bajtů nebo 16-bitové slovo, je přesměrován na odpovídající adresy a nezarovnaný přístup není povolen. ARMv6 zavádí BE-8 nebo Byte-Invariantní režimu, kde je přístup na jeden byte pracuje jako little-endian režimu, ale přístup k 16-bit, 32-bit nebo (počínaje s ARMv8) 64-bit slovo výsledky v byte swap údajů. To zjednodušuje nepřidělený přístup k paměti, stejně jako paměť mapovaný přístup k registrům jiným než 32 bitů.,
Mnoho procesory mají instrukce, aby převést slovo do rejstříku na opačné endian, to znamená, že swap pořadí bajtů v 16-, 32 – nebo 64-bit slovo. Všechny jednotlivé bity však nejsou obráceny.
Poslední Intel x86 a x86-64 architektury Procesorů mají MOVBE instrukce (Intel Core od generace 4, po Atom), která načte big-endian formátu word z paměti nebo napíše slovo do paměti v big-endian formátu. Tyto procesory jsou jinak důkladně málo endian., Oni také již řadu swap pokyny, obrátit pořadí bajtů obsahu registrů, jako když slova již byly načteny z paměti místech, kde byli v „špatné“ endian.
Plovoucí pointEdit
i když všudypřítomné x86 procesory dnes používá little-endian úložiště pro všechny typy dat (integer, floating point), existuje řada hardwarových architektur, kde čísla s plovoucí desetinnou čárkou jsou zastoupeny v big-endian formě, zatímco celá čísla jsou zastoupeny v little-endian formě., Existují procesory ARM, které mají poloviční endian, napůl big-endian s plovoucí desetinnou čárkou pro čísla s dvojitou přesností: obě 32bitová slova jsou uložena v malých endiánských jako celočíselné registry, ale nejvýznamnější z nich první. Protože pro ně existuje mnoho formátů s plovoucí desetinnou čárkou bez „síťového“ standardního zastoupení, standard XDR používá jako svou reprezentaci big-endian IEEE 754. Může se proto zdát divné, že rozšířený standard IEEE 754 s plovoucí desetinnou čárkou nespecifikuje endianness., Teoreticky to znamená, že ani standardní data IEEE s plovoucí desetinnou čárkou napsaná jedním strojem nemusí být čitelná jiným. Nicméně, v moderní standardní počítače (tj. prováděcí IEEE 754), lze v praxi bezpečně předpokládat, že endian je stejný pro čísla s plovoucí desetinnou čárkou jako pro celá čísla, takže konverze jednoduché, bez ohledu na datový typ. (Malé vestavěné systémy používající speciální formáty s plovoucí desetinnou čárkou však mohou být další záležitostí.,)
Variabilní délka dataEdit
Většina instrukcí za dosud obsahují velikosti (délky) jeho operandy v kódu operace. Často dostupné délky operandu jsou 1, 2, 4, 8 nebo 16 bajtů.Existují však také architektury, kde může být délka operandu držena v samostatném poli instrukce nebo se samotným operandem, např. pomocí slovní značky. Takový přístup umožňuje operand délky až 256 bajtů nebo dokonce plné velikosti paměti.Datové typy takových operandů jsou řetězce znaků nebo BCD.,
OptimizationEdit
little-endian systému má tu vlastnost, že stejné hodnoty lze číst z paměti v různých délkách bez použití jiné adresy (i když zarovnání omezení jsou uloženy). Například, 32-bit paměti s obsahem 4A 00 00 00
může být přečíst na stejné adrese jako buď 8-bitů (hodnota = 4A), 16-bit (004A), 24-bit (00004A), nebo 32-bit (0000004A), které zachovávají stejnou číselnou hodnotu., Ačkoli tato vlastnost little endian je zřídka používána přímo programátory na vysoké úrovni, je často zaměstnána optimalizátory kódu i programátory montážního jazyka.
V další konkrétní podmínky, jako je optimalizace jsou ekvivalentní následující kód v C vrací pravda, na většině little-endian systémy:
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");
Zatímco není povoleno C++, jako typ pěchování kód je povoleno jako „provádění definované“ C11 standardní a běžně používané v kódu interakci s hardware.,
Na druhou stranu, v některých situacích to může být užitečné pro získání aproximace multi-byte nebo multi-word hodnota, tím, že čte pouze jeho nejvýznamnější část, místo kompletní zastoupení; big-endian procesor může číst takové aproximace pomocí stejného základu-mailovou adresu, která bude použita pro plnou hodnotu.
Optimalizace tohoto druhu nejsou přenosné napříč systémy různých endian.
příkaz k Výpočtupedit
některé operace v systémech pozičních čísel mají přirozený nebo preferovaný příkaz, ve kterém mají být provedeny základní kroky.,Tato objednávka může ovlivnit jejich výkon na malých bajtově adresovatelných procesorech a mikrokontrolérech.
Nicméně, high-výkon procesorů obvykle přinést typické multi-byte operandy z paměti, ve stejném množství času, které by za jeden byte, tak složitost hardware není ovlivněna bajt objednávání.
Operace začíná na nejméně významné digitEdit
Jak se naučil ve škole, sčítání, odčítání, násobení a začít na pozici nejméně významné číslice a propagovat provádět následné více významné postavení.,Řešení multiciferných dat na prvním (= nejmenším adresním) bajtu je převládajícím adresovacím schématem.Pokud tento první bajt obsahuje nejméně významnou číslici-což je ekvivalentní malé-endianness, pak je implementace těchto operací okrajově jednodušší.
Operace začíná na nejvýznamnější digitEdit
Srovnání a dělení start na nejvýznamnější číslici a propagovat je možné provádět pro následující méně platných číslic., U číselných hodnot s pevnou délkou (typicky délky 1,2,4,8,16) je provádění těchto operací na velkých endiánských strojích nepatrně jednodušší.
operandy s různou délkouedit
v programovacím jazyce C musí být lexikografické srovnání znakových řetězců provedeno podprogramy, které jsou často nabízeny a implementovány jako podprogram (např. strcmp).
mnoho procesorů big-endian obsahuje hardwarové pokyny pro lexikograficky porovnávající řetězce znaků s různou délkou (např. systém IBM / 360 a jeho nástupci).,
Operace bez impactEdit
normální přenos dat pomocí příkazu přiřazení je v zásadě nezávislý na endian procesoru.
Middle-endianEdit
četné další příkazy, obecně nazývané middle-endian nebo mixed-endian, jsou možné. Jedním z takových příkladů mimo informatiku je standardní americké formátování data měsíce / dne / roku.
PDP-endianEdit
PDP-11 je v zásadě 16bitový malý endiánský systém., Instrukce pro konverzi mezi plovoucí desetinnou čárkou a celočíselných hodnot ve volitelném floating-point procesor PDP-11/45, PDP-11/70, a v některých novější procesory, uložené 32-bit, „double precision celé číslo dlouhé“ hodnoty s 16-bit poloviny vyměnil z očekávané little-endian pořadí. Unixový kompilátor C používal stejný formát pro 32bitová dlouhá celá čísla. Toto uspořádání je známé jako PDP-endian.
způsob, jak interpretovat tuto endianness, je, že ukládá 32bitové celé číslo jako dvě 16bitová slova v big-endian, ale samotná slova jsou malá-endian (např., „jag cog sin“ would be „gaj goc nis“):
increasing addresses → | |||||
0Bh | 0Ah | 0Dh | 0Ch | ||
0A0Bh | 0C0Dh |
16bitové hodnoty zde odkazují na jejich číselné hodnoty, nikoli na jejich skutečné rozložení.
Honeywell Series 16edit
Honeywell Series 16 16-bitové počítače, včetně Honeywell 316, jsou opakem PDP-11 při ukládání 32-bitových slov v 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.