PDP 엔디안에서 비트 쉬프트를 수행하면 리틀 또는 빅 엔디 언 시스템에서보다이 작업이 약간 더 오래 걸릴 수 있습니까?PDP 엔디안 및 비트 쉬프트
내가이 질문을하는 이유는 교대로 모든 방향으로가는 비트처럼 보이기 때문이며 컴퓨터가하기가 어려울 것입니다.
PDP 엔디안 컴퓨터에 액세스 할 수 없어서 테스트 할 방법이 없습니다. = (
PDP 엔디안에서 비트 쉬프트를 수행하면 리틀 또는 빅 엔디 언 시스템에서보다이 작업이 약간 더 오래 걸릴 수 있습니까?PDP 엔디안 및 비트 쉬프트
내가이 질문을하는 이유는 교대로 모든 방향으로가는 비트처럼 보이기 때문이며 컴퓨터가하기가 어려울 것입니다.
PDP 엔디안 컴퓨터에 액세스 할 수 없어서 테스트 할 방법이 없습니다. = (
- 중동 엔디안 또는 PDP-엔디안 시스템은 새로운 소프트웨어의 개발자, 그것은 단지 완벽하게 합리적인 없습니다. 첫번째 최하위 바이트를 가진 각 단어 먼저 가장 중요한 단어를 저장하지만, 이 가능성을 무시하기를 강력히 권유한다 .은 middle-endian이 때때로 이 packed-decimal과 같은 형태로 나타나지만 중간 - 엔디안 형식의 메모리에 32 비트 정수 값을 저장 한 프로세서라고 생각하지 않는다. 형식, 부동 소수점 형식 및 모호한 통신 프로토콜 (V의 TCP/IP 패킷 길이가 인 경우 사용됨) isa의 "Visa Base I"프로토콜).
나는 그 자체로 대답한다고 생각한다.
그리고 교대라고하면 조금 교대합니까?
이런 식으로 생각해 봅시다. 프로세서가이를 지원했다면, 그런 식으로 다양한 기능을 수행 할 지침이있을 것입니다. 일부 프로세서는 어쨌든 캐리 비트로 한 비트 만 이동하거나 회전합니다. 그래서 그것들과 관련이 없으며, 같은 속도라도 상관 없습니다.
다른 어떤 것과 마찬가지로. 당신이 그것을보고 그것을 바이트로 조작한다면 느리고 고통스럽게 만들기 위해 느리고 고통스럽게 만듭니다. 그러나 바이트는 엔디안이 없으므로 중요하지 않습니다.
단어를 다루고 있습니다 (잘하면). 엔디안 중 하나가 사라집니다. 그러나 다른 모든 단어가 다른 엔디안이라 할지라도 어느 종류 (여러 프로세서에서 가능)를 읽을 수있는 능력이 있더라도 여전히 단어 하나 하나가 움직이는 것을 신경 쓰지 않으며 엔디안도 그 시점에서 사라집니다 .
신화 속의 동일한 웹 페이지.
PDP-11은 "중간 엔디안"이었습니다. 오직 일종의. PDP-11에는 메모리에 32 비트 값을 저장하는 지침이 없으므로 "중간 값"값은 메모리에 값을 저장하는 방식에 적용 할 수 없습니다. 리틀 엔디안 방식으로 보통 메모리에 16 비트 값을 저장했습니다. 값을 16 비트 CPU 레지스터 쌍 (메모리 아님)에 저장하여 32 비트 연산을 수행 할 수 있습니다. 대부분 이라는 중요한 단어가 낮은 번호의 레지스터에 들어 갔지만 각 의 레지스터 값은 리틀 엔디안으로 저장되었습니다. 그래서 "middle-endian"으로 볼 수는 있지만 어쨌든 코드는 절대로 휴대용이 될 수없는 언어 프로그래머와 컴파일러 작성자 인 어셈블리에만 중요 할 수 있습니다.
단어를 저장하고 별도로 바이트를 볼 때만 엔디 언은 관찰 할 수 있습니다.
모든 종류의 컴퓨터에있는 레지스터의 데이터는 항상과 같은 값으로 표현할 때처럼 왼쪽에있는 MSB와 함께 바이너리로 동작합니다. 왼쪽 시프트는 항상 2의 거듭 제곱을 곱하고 오른쪽 시프트는 크거나 작거나 pdp- 엔디안과 관계없이 항상 2의 거듭 제곱으로 나눕니다.
1 바이트보다 큰로드 또는 저장소를 실행할 때 CPU의로드 저장 단위에 적용되는 것으로 엔디안을 생각하십시오. 코어의 레지스터와 실행 단위 부분은 레지스터 너비의 2 진 정수를 보게됩니다.
이 기계의 기본 엔디 언에 대한 종속성없이 바이트 스트림에서에/정수를 직렬화 "endian agnostic" code 쓰기 가능합니다. 예 : int
추가로 4 바이트 :
i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);
PDP11 속 엔디안 포맷은 16 비트에서 32 개 비트 시스템의 동작을 에뮬레이트 할 필요 나온다. 이것은 PDP11이 데이터에 대해 작은 엔디안을 사용하더라도 높은 단어를 먼저 저장 한 다음 낮은 단어를 메모리에 먼저 저장함으로써 수행됩니다. 이상한 endianess가 발생합니다. 실제로 실제 성능 차이는 없습니다. 리틀 엔디안에 저장됩니다
mov #var+2,r0 ; load the address of the low word
asl (r0) ; left shift low word
rol -(r0) ; left shift high word with carry
var
경우, 코드가 유사하다 :
move #var,r0 ; load address of the low word
asl (r0)+ ; left shift low word
rol (r0) ; left shift high word
* * OP는 PDP 엔디안 32 비트 워드를 단일 연산으로 이동하는 것을 상상하고 있었고, 하드웨어가 비트 연산을 수행하는 것이 더 복잡 할 것이라고 생각합니다 오른쪽에서 왼쪽으로 이동합니다 (이것이 내가 내 부분에 집중 한 이유입니다). PDP-11은 16 비트 컴퓨터이며 실제 코드 시퀀스임을 지적했다. –
얘기하는 경우 한 곳에서 메모리에 저장된 정수는 여전히 세의 지시로 이루어집니다 시프 팅 왼쪽 16 비트 레지스터 인 PDP11은 16 비트 머신입니다. AFAIR, PDP11-endianness는 32 비트 'long'이 메모리에 배치되는 방식을 말하며, 일반적으로 레지스터에서 수행되는 전환과 관련이 없습니다. PDP11에서의 32 비트 시프트는 32 비트 머신에서의 64 비트 시프트 또는 64 비트 머신에서의 128 비트 시프트와 비슷하게 보일 것입니다. – EOF
@dwelch 나는 아무것도하지 않고있다. ... 이것은 단지 호기심에서 벗어난 것이다. – DarthRubik
임의의 비트 연산이 표현이 아닌 값으로 동작 함 –