x64 레지스터 이름의 'R'은 무엇을 의미합니까?


27

32 비트 레지스터의 이름이 16 비트 레지스터와 같이 'E'접두어로 확장되었음을 의미합니다. 나는 명시 적으로 언급 한 적이 없지만 16 비트에서 32 비트로 확장되었다는 것을 항상 가정했습니다.

나는 'R'이 무엇을 의미하는지 알아 내려고 노력했지만 내 Google 기술로 인해 실패했습니다. 누구 알아?


답변:


32

그것은 register를 의미하며 , 역사적인 이유로 전부가 아닙니다.

역사적인 부분은 인텔이 8008 (A ~ E + H 및 L) 문자를 사용하여 레지스터를 열거하는 습관에 빠져 있다는 것입니다. 마이크로 프로세서는 레지스터가 매우 적고 더 많은 것을 얻지 못할 가능성이 높았 기 때문에 당시에는이 계획이 적절했다. 그리고 나서 일반적인 감정은 새로운 CPU가 나타날 때 소프트웨어가 다시 작성 될 것이라는 점이었다. 따라서 모델간에 레지스터 이름 지정 체계를 변경하는 것은 큰 문제가되지 않았다. 아무도 8088이 IBM PC에 통합 된 후 "패밀리"로 발전하는 것을 예견하지 않았으며, 이전 버전과의 호환성 때문에 인텔은 32 비트 레지스터에서 "E"와 같은 체계를 유지해야했습니다.

비 역사적 부분은 모두 실용적입니다. 범용 레지스터에 문자를 사용하면 프로그램 카운터, 플래그 또는 스택 포인터와 같은 특수 레지스터의 이름과 혼동 될 수있는 문자를 제거 할 경우 26 개로 제한됩니다.

확인할 소스가 없지만 R64 비트 CPU에서 접두사로 선택 하고 R8에서 R15를 통해 32 비트 및 32 비트 사이에서 일반적으로 사용되는 번호가 지정된 레지스터로의 전환을 신호한다고 생각합니다 거의 반세기 동안 8008에서 파생되지 않은 더 큰 아키텍처. IBM은 360과 함께 1960 년대에이를 수행했으며 PowerPC, DEC Alpha, MIPS, SPARC, ARM, Intel의 i860 및 i960 및 오랫동안 잊혀진 많은 것들이 이어졌습니다.

기존 레지스터가 존재하는 경우 R0에서 R7에 잘 맞을 것입니다. 내부에서 그렇게 처리하면 조금 놀라지 않을 것입니다. 기존의 긴 레지스터 (RAX / EAX / AX / AL, RBX / EBX / BX / BL 등)는 태양이 타 버릴 때까지 계속 유지됩니다.


1
약간의 anticlimactic 그러나 나는 너무 놀라지 않아야한다고 생각합니다. 감사.
Matt

3
그것이 내가 소집 할 수있는 모든 드라마였습니다. :-)
Blrfl 2016 년

매우 흥미로운 읽기 +1. 그러나 그것이 한 줄로 요약된다면 그것은 내가 준 대답 일 것입니다. 이 풍부하고 흥미로운 정보는 모두 요약하면 "역사적 이유"로 분류됩니다.
Mike Nakis

6
AMD는 않았다 이름을 변경하거나 하위 8 개 레지스터 앨리어싱 고려 r0- r7, 또는 사용하는 UAX대신 r8 . "레지스터의 이름을 가장 잘 지정하는 방법은 실제로 레지스터 확장을 수행하는 데있어 가장 어려운 부분 중 하나였습니다." ( 다른 깔끔한 x86-64 기록에 대해서는 stackoverflow.com/a/35619528/224132 를 참조하십시오 .) 또한 이진 인코딩의 순서는 RAX / RBX / ...가 아니며 AX, CX, DX, BX
Peter입니다. Cordes

9

이전 프로세서에서는 모든 레지스터가 같지 않았습니다.

  • 칩에 충분한 공간이 없어서 각 레지스터마다 가산기 장치가 있습니다.
  • 8 비트에서는 소스와 대상의 모든 가능한 조합에 사용할 수있는 opcode가 충분하지 않았습니다.

따라서 가산기가 관여 할 때 하나의 특정 레지스터가 항상 관련되어 있다고 가정하면 칩이 덜 복잡해지고 opcode가 더 짧아집니다.

예를 들어 6510 (Commodore 64에서 사용)은 레지스터 A를 사용해서 만 추가 할 수 있고 색인은 X 또는 Y를 사용했습니다. INC X 및 INC Y 명령어는 있지만 INC A는 없습니다.

레지스터의 사용법이 다르므로 니모닉이 사용을 반영하여 선택되었습니다. 예를 들어 6510의 A, X 및 Y (A, B 및 C 대신).

8086의 이름은 사용법도 반영하도록 선택되었습니다. 4 개의 범용 레지스터를 사용하면 AX, BX, CX 및 DX라는 이름을 갖는 것이 논리적이었습니다. 추가 인덱싱 레지스터를 BP 및 SP (니모닉 : Base Pointer, Stack Pointer)라고했습니다.

많은 opcode가 16 비트로 확장되었으므로 4 개의 레지스터 중 하나가 사용되었음을 나타내는 공간이 약간있었습니다. 그러나 CX가 약간 특별했기 때문에 역사적 이유 중 일부가 여전히 적용되었습니다. 8 비트 opcode 인 REP 등은 항상 CX를 카운터로 사용합니다. 간단한 니모닉 CX = Counter는 어떤 것이 사용되는지 기억하는 데 도움이됩니다.

8086의 후임자를위한 opcode는 이전 버전과 호환되어야했으며 가변 길이 opcode의 결과로 혼란 스러웠습니다. 32 비트 버스가보다 일반화되면 고정 opcode 길이의 프로세서가 시도되었습니다. 이는 CPU의 디코딩 부분을 단순화하여 더 많은 레지스터에 사용될 수있는 공간을 확보합니다.

CISC (Complex Instruction Set CPU)와 달리이 사고 방식을 따르는 프로세서를 RISC 프로세서 (Reduced Instruction Set CPU)라고합니다.

레지스터가 많을수록 메모리 스필 오버가 줄어 듭니다. 기본적으로 레지스터는 사용 가능한 가장 빠른 캐시이므로 오늘날에도 레지스터 수를 늘리는 것이 좋습니다. 특수 명령의 부족은 간단한 명령의 빠른 처리량으로 보상됩니다.

고정 길이 32 비트 opcode에는 소스, 두 번째 소스, 작업 및 대상을 포함하기에 충분한 공간이 있습니다. SPARC 는 각 소스, 두 번째 소스 및 대상에 대해 5 비트를 연결하는 동시에 32 개의 레지스터를 볼 수있었습니다.

32 개의 레지스터는 글자를 사용하기에는 너무 많아서 어쨌든 거의 동일했기 때문에 번호를 매기는 것이 확실한 선택이었습니다. 'R'은 상수 0..31과 구별하기 위해 사용되었으며 'R'은 레지스터에 대한 간단한 니모닉입니다. 따라서 : R0..R31.

수년 동안 펜티엄과 그 후계자들은 역 호환성을 유지해 왔습니다. 그러나보다 성공적인 RISC 아이디어도 많이 포함되었습니다. 종종 이러한 새로운 RISC 유사 명령어는 이전 버전과 호환되는 버전보다 빠르게 실행됩니다.

메모리 액세스 수를 줄이기 위해 Intel에서 레지스터 수를 늘 렸습니다.

그리고 인텔은 마침내 R 표기법을 사용하기 시작했습니다. 이전 버전과의 호환성을 통해 AX, BX, ...는 그대로 유지되지만 AX는 R0과 동의어 일뿐입니다.


면책 조항 : 위의 역사에 대한 견해입니다. 내가 역사의 초기 부분을 직접 목격하지 않았기 때문에 불완전 할 것입니다. 그럼에도 불구하고, 나는 그것이 일부 사람들에게 유용하기를 바랍니다.


1
6500 가족은 정말 하나의 즉각적인 모드 추가가 같은 두 사이클을했다 때문에 축적을 증가하기위한 전용 명령에 대한 필요도 없었다 INX또는 INY코드가 추가 바이트를 차지하지만,을,. 나는 그 칩을 위해 많은 어셈블리를 썼고 실제로 그것을 필요로하는 수학을하는 것 외에는 그 종류의 증분이 드물었다.
Blrfl

@Blrfl 당신이 맞습니다 : ADD 1작동하므로 전문화 된 '증가 A'가 필요하지 않았습니다. 그리고 나는 그것을 필요로하는 것을 기억하지 않습니다.
Sjoerd

1
x86의 레지스터 수를 늘리고 이름을 지정한 것은 인텔이 아니라 AMD에 의해 x86의 64 비트 확장이 만들어 짐에 따라 AMD라는 점에 주목해야합니다 . 인텔의 64 비트 디자인은 Itanium 으로 많은 양의 레지스터 (범용 정수 + 기타 정수)를 넣었지만 잘 수행하지 못했습니다.
8bittree

5

그것은 단지 '등록'을 의미합니다. 역사적 이유로.


현재 레지스터를 참조한다면 실제로 역사적인 것은 아닙니다. 레지스터의 다른 이름 (AX, EAX 등)은 역사적인 이유로 더 큽니다. 그러나 RAX의 "R"은 실제로 매우 적용 가능합니다.
Carl G

1
(+1) meme : "길이 길게 설명하면 짧게 설명 할 수 있습니다."
user7813604
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.