HistoryEdit
많은 역사적이고 현존하는 프로세서 사용-엔디안 메모리 표현,배타적으로 또는 디자인 옵션입니다. 빅 엔디안 메모리 표현은 일반적으로 네트워크,주문에서 사용되는 인터넷 프로토콜습니다. 다른 프로세서 유형을 사용하여 리틀-엔디안 메모리 표현,다른 사용하는 또 다른 계획이라고”middle-endian”,”혼-endian”또는”PDP-11-endian”.IBM System/360 은 후계자 System/370,ESA/390 및 z/Architecture 와 마찬가지로 빅 엔디안 바이트 순서를 사용합니다., PDP-10 은 또한 바이트 지향 명령어에 빅 엔디안 주소 지정을 사용합니다. IBM Series/1 미니 컴퓨터도 빅 엔디안 바이트 순서를 사용합니다.
다른 endianness 의 데이터를 다루는 것은 때때로 NUXI 문제라고합니다. 이 용어는 혼합 엔디안 PDP-11 에서 실행되는 UNIX 를 빅 엔디안 IBM 시리즈/1 컴퓨터에 적용하는 동안 발생하는 바이트 순서 충돌을 암시합니다. 유닉스는 내부 표현이 다른 플랫폼에 대해 동일한 코드를 컴파일 할 수있게 해주는 최초의 시스템 중 하나였습니다., 첫 번째 중 하나의 프로그램으로 변환되었는데 인쇄Unix
지에서 시리즈/1 그것을 인쇄nUxi
대신 합니다.
Datapoint2200 은 little-endian 과 함께 간단한 비트 직렬 논리를 사용하여 캐리 전파를 용이하게합니다. 인텔이 Datapoint 용 8008 마이크로 프로세서를 개발했을 때 호환성을 위해 little-endian 을 사용했습니다., 그러나,Intel 전달하지 못했 8008 시간에,데이터 요소에 사용되는 중간 규모의 통합에 해당하지만,리틀-엔디안 유지되었에서 가장 인텔 디자인을 포함하여,MCS-48 및 8086 및 x86 후계자. DEC Alpha,Atmel AVR,VAX,Mos Technology6502 제품군(Western Design Center65802 및 65C816 포함),Zilog Z80(Z180 및 eZ80 포함),Altera Nios II 및 기타 여러 프로세서 및 프로세서 제품군도 리틀 엔디안입니다.Motorola6800/6801,6809 및 68000 시리즈의 프로세서는 빅 엔디안 형식을 사용했습니다.,
Intel8051,에 반하는 기타 인텔 프로세서 기대하는 16 비트 주소를 LJMP 및 LCALL 에서 큰-endian 형식으로하다;그러나,당신의 솔루션의 지침을 반환하는 주소에 스택에서 little-endian 형식입니다.
SPARC 역사적으로 사용-endian 까지 버전 9bi-endian;마찬가지로 일찍 IBM 전력 프로세서 크-endian 지만,사용 및 전력 ISA 후손들은 지금 bi-endian. ARM 아키텍처는 bi-endian 이되었을 때 버전 3 이전에 little-endian 이었습니다.,
현재 architecturesEdit
Intel x86 및 AMD64/x86-64 프로세서 시리즈는 리틀 엔디안 형식을 사용합니다. 리틀 엔디안 모드만 허용하는 이 규칙을 따르는 다른 명령어 세트 아키텍처에는 Nios II,Andes Technology NDS32 및 Qualcomm Hexagon 이 포함됩니다.
일부 명령어 세트 아키텍처에서는 bi-endian 아키텍처에서 endianness 의 소프트웨어를 실행할 수 있습니다. 여기에는 ARM AArch64,C-Sky,Power ISA 및 RISC-V 가 포함됩니다.,
전적으로 큰-endian 아키텍처를 포함 IBM z/아키텍처,Freescale 제공합(는 모토로라 68000 시리즈 기반),Atmel AVR32 및 OpenRISC. BI-endian Power ISA 및 SPARC 의 IBM AIX 및 Oracle Solaris 운영 체제는 big-endian 모드로 실행되며 일부 Linux On Power 배포판은 little-endian 모드로 이동했습니다.,
Bi-endiannessEdit
어떤 아키텍처(를 포함 팔 버전 3 이상,사용,알파,SPARC V9,MIPS,PA-RISC,SuperH SH-4IA64)기능을 설정 할 수있는 전환 엔디안에서 데이터를 가져와 상점,명령어를 가져옵니다. 이 기능은 성능을 향상 시키거나 네트워킹 장치 및 소프트웨어의 논리를 단순화 할 수 있습니다. 단어 바이 엔디안,하드웨어에 대해 말할 때,계산 또는 엔디안 형식으로 데이터를 전달하는 기계의 기능을 나타냅니다.,
의 많은 이러한 아키텍처로 전환할 수 있습을 통해 소프트웨어는 기본적으로 특정 endian 형식(일반적으로 수행하는 컴퓨터를 시작할 때까지);그러나 어떤 시스템에서 기본 엔디안 선택에 의해 하드웨어는 메인 보드며 변경될 수 없습을 통해 소프트웨어(예:알파,실행에서만-endian 모드에 크레이 T3E).
“bi-endian”이라는 용어는 주로 프로세서가 데이터 액세스를 처리하는 방법을 나타냅니다., 지 액세스가(가져오의 명령어)에서는 주어진 프로세서는 여전히 추측정 엔디안 경우에도 데이터 액세스는 완전히 bi-endian 지만,이것은 항상하지 않는 경우,같은 인텔 IA64 기반 Itanium CPU 수 있습니다.
참고,너무,일부 명목상 바이 엔디안 Cpu 는 완전히 엔디안을 전환하는 마더 보드의 도움을 필요로., 예를 들어,32-비트 데스크톱향 PowerPC 프로세서에서 little-endian 모드로 작동 little-endian 의 관점에서의 프로그램을 실행하지만,그들이 필요로 하는 마더보드를 수행하는 64 비트 스왑 모든 8 바이트 레인을 보장하는 little-endian 보기물의 것이 적용 I/O devices. 의 부재에서 이상 마더보 하드웨어 장치 드라이버 소프트웨어 작성해야 하는 다른 주소하는 취소는 불완전한 변화와 또한 수행해야 정상적인 바이트 스왑.,
임베디드 사용을 목적으로하는 많은 PowerPC 프로세서 및 거의 모든 SPARC 프로세서와 같은 일부 Cpu 는 페이지 당 엔디안을 선택할 수 있습니다.
SPARC 프로세서 1990 년대 후반 이후(“SPARC v9″준수 프로세서)허용 데이터 엔디안하게 선택해야하는 각 개인이 지시하는 부서 또는 저장 하는 지 확인해 주시기 바랍니다.
ARM 아키텍처는 BE-8 및 BE-32 라고하는 두 개의 빅 엔디안 모드를 지원합니다. Armv5 까지의 cpu 는 BE-32 또는 단어 불변 모드 만 지원합니다., 여기에 모든 자연스럽게 정렬되는 32-bit access 같은 작품에서 little-endian 모드지만 액세스를 바이트 또는 16 비트 단어로 리디렉션된 해당 주소와 비정렬 액세스가 허용되지 않습니다. ARMv6 소개될-8 바이트 고정 모드에 대한 액세스를 바이트 단일 작품으로서 little-endian 모드지만 액세스하는 16 비트,32 비트 또는(을 시작으로 ARMv8)64-bit word 결과에 바이트 스왑의 데이터입니다. 이는 정렬되지 않은 메모리 액세스뿐만 아니라 32 비트 이외의 레지스터에 대한 메모리 매핑 된 액세스를 단순화합니다.,
많은 프로세서 지침을 변환하는 단어에서 등록을 반대 엔디안,그것은,그들이 스왑의 순서를 바이트 16,32 비트 또는 64 비트 단어입니다. 모든 개별 비트하지만 반전되지 않습니다.
최근 Intel x86 및 x86-64architecture Cpu 있 MOVBE 침(Intel Core 이후 4 세대 후,원자)가져오는 큰-endian 형식으로 단어는 메모리에서 쓰거나 낱말로 메모리에서-endian 형식입니다. 이 프로세서는 그렇지 않으면 철저하게 리틀 엔디안입니다., 그들은 또한 이미 범위의 교환 지침을 반대로 바이트의 내용을 등록할 때와 같이 단어는 이미에서 가져온 메모리 위치에서 그들이’잘못된’엔디안.
부동 pointEdit
지만 유비쿼터스 86 프로세서는 오늘날의 사용 little-endian 저장소에 대한 모든 유형의 데이터(정수,부동 소수점),다수의 하드웨어 아키텍처에 있는 부동 소수점번호는 표현에서 큰-endian 는 동안 양식 정수를 표현에 little-endian 형태입니다., 가 있 팔 프로세서가 반 little-endian,half-endian 부동 소수점 대표 두 번 정밀번호:32 비트 단어에 저장되 little-endian 같은 정수로 등록하지만,가장 중요한 한 처음이다. 되었기 때문에 많은 부동 소수점 형식 없이”네트워크”표준이 그들을 위해,XDR 표준을 사용하-endian IEEE754 으로 표현입니다. 그것을 할 수 있습니다 따라서 나타나는 것이 이상한 광범위한 IEEE754 부동 소수점 기준을 지정하지 않 엔디안., 이론적으로,이 의미는 표준 IEEE 부동 소수점에 작성된 데이터에 의해 하나의 기계에서는 읽을 수 없습니다. 그러나 현대적인 표준 컴퓨터(즉,구현 IEEE754),하나 있습니다 실제로 안전하게 가는 엔디안은 동일한 부동 소수점으로 숫자를 위해 정수,변환 간단에 관계 없이 데이터의 유형입니다. (그러나 특수 부동 소수점 형식을 사용하는 소형 임베디드 시스템은 또 다른 문제 일 수 있습니다.,)
가변 길이 dataEdit
대부분의 지시로 간주까지 포함 크기(길이)의 피연산자 내에서 작동 코드입니다. 자주 사용 가능한 피연산자 길이는 1,2,4,8 또는 16 바이트입니다.하지만 또한 아키텍처의 길이가 피연산자에서 개최 할 수있는 별도의 필드의 명령 또는 자체 연산자,e. g. 에 의해 단어 표시 합니다. 이러한 접근을 허용 피연산자의 길이는 최대 256 바이트 또는 전체 메모리 크기입니다.이러한 피연산자의 데이터 유형은 문자 문자열 또는 BCD 입니다.,
OptimizationEdit
리틀-엔디안 시스템을 제공하는 동일한 값을 읽을 수 있는 메모리에서 다른 길이에 사용하지 않고 다른 주소(경우에도 정렬한 제한을 부과). 예를 들어,32 비트 메모리에 위치한 콘텐츠4A00 00 00
읽을 수 있습에서 동일한 주소지 중 하나로 8-bit(value=4A),16-bit(004A),24-bit(00004A),또는 32 비트(0000004A),모두를 유지하는 동일한 숫자 값입니다., 이 little-endian 숙박 시설은 거의 직접 사용하여 높은 수준의 프로그래머,그것은 종종에 의해 고용 코드 최적화뿐만 아니라 어셈블리 언어로 프로그래머를 위한 것입니다.
에서 더 구체적인 용어로,이러한 최적화는 다음 C 코드를 반환에서 사실 가장 little-endian 시스템:
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");
는 동안에 의해 허용되지 않는 C++,그러한 유형 말장난 코드를 사용할 수 있습니다”으로는 구현 시 정의된”의 C11 표준 및 일반적으로 사용되는 코드에서와 상호작용 하드웨어입니다.,
On the other hand,어떤 상황에서 수용을 받기를 근사치 멀티-바이트 또는 여러 단어로 값 읽기만 가장 중요한 부분을 대신에게 완성형의 지표이다;-endian 프로세서를 읽을 수 있습니다 그런 근사치를 사용하여 같은 기본 주소를 사용할 수 있는 전체에 대한 값입니다.
이러한 종류의 최적화는 다른 endianness 의 시스템에서 이식 할 수 없습니다.
계산 orderEdit
일부 작업에 위치 숫자 시스템 자연인 또는 선호하는 순서 초등학교 단계를 실행할 수 있습니다.,이 순서는 소규모 바이트 주소 지정 가능 프로세서 및 마이크로 컨트롤러에서 성능에 영향을 줄 수 있습니다.
그러나,고성능 프로세서 일반적으로 가 일반적인 멀티바이트 피연산에서 메모리에서 같은 양의 시간을 그들은 가져온 단일 바이트를,그래서 복잡한 하드웨어에 의해 영향을 받지 않습 byte ordering.
작업을 시작하에서 적어도 중요한 digitEdit
으로 학교에서 배운,또한 빼기,곱셈 시작에서 적어도 중요한 위치 및 자리에 전파를 수행하는 이후 더 중요한 위치입니다.,첫 번째(=가장 작은 주소)바이트에서 여러 자리 데이터를 주소 지정하는 것이 우세한 주소 지정 체계입니다.이 첫 번째 바이트를 포함하는 적어도 중요한 자리에 해당하는 리틀-엔디안,그 구현의 이러한 작업은 소폭 간단합니다.
작업을 시작에서 가장 중요한 digitEdit
비교와 분할에서 시작하는 가장 중요한 자리하고 전달 가능한 수행을 덜 중요한 자리입니다., 고정 길이는 숫자 값(일반적으로 길이 1,2,4,8,16),의 구현에 이러한 작업은 소폭 간단에-endian 기계입니다.
피연산자의 다양한 lengthEdit
에서 프로그래밍 언어로는 C 의 사전교의 문자열에 의해 수행되어야한 서브 루틴은 자주 제공하고 구현으로 서브루틴(e. g. strcmp).
많은 빅 엔디안 프로세서에는 다양한 길이의 문자 문자열(예:IBM System/360 및 그 후계자)을 사전 그래픽으로 비교하기위한 하드웨어 지침이 포함되어 있습니다.,
impactEdit 없는 작업
할당 문에 의한 일반 데이터 전송은 원칙적으로 프로세서의 엔디언과 무관합니다.
Middle-endianEdit
일반적으로 middle-endian 또는 mixed-endian 이라고 불리는 수많은 다른 주문이 가능합니다. 컴퓨터 과학 이외의 그러한 예 중 하나는 월/일/년의 표준 미국 날짜 서식입니다.
PDP-endianEdit
pdp-11 은 원칙적으로 16 비트 리틀 엔디안 시스템입니다., 지 변환하는이 부동 소수점과 정수 값에서 선택적 부동 소수점 프로세서의 PDP-11/45,PDP-11/70,그리고 어떤 나중에 프로세서를 가지고 있으므로,저장되는 32-bit”정밀도 두 배 정수 길”값 16 비트 반환에서 예상되는 little-endian 다. UNIX C 컴파일러는 32 비트 긴 정수에 대해 동일한 형식을 사용했습니다. 이 순서는 PDP-엔디안으로 알려져 있습니다.
는 방법을 해석하는 이 엔디안은 그것을 저장하는 32-bit integer 로 두 16-비트 단어에서 큰-endian 지만,말은 스스로 little-endian(E.g., “jag cog sin” would be “gaj goc nis”):
increasing addresses → | |||||
0Bh | 0Ah | 0Dh | 0Ch | ||
0A0Bh | 0C0Dh |
16 비트 값은 여기를 참조하신 숫자 값이 아닌 그들의 실제의 레이아웃이 있습니다.
Honeywell Series16Edit
honeywell series16 16 비트 컴퓨터(Honeywell316 포함)는 C 에 32 비트 단어를 저장하는 PDP-11 과 반대입니다., 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.