답변:
그것은 register를 의미하며 , 역사적인 이유로 전부가 아닙니다.
역사적인 부분은 인텔이 8008 (A ~ E + H 및 L) 문자를 사용하여 레지스터를 열거하는 습관에 빠져 있다는 것입니다. 마이크로 프로세서는 레지스터가 매우 적고 더 많은 것을 얻지 못할 가능성이 높았 기 때문에 당시에는이 계획이 적절했다. 그리고 나서 일반적인 감정은 새로운 CPU가 나타날 때 소프트웨어가 다시 작성 될 것이라는 점이었다. 따라서 모델간에 레지스터 이름 지정 체계를 변경하는 것은 큰 문제가되지 않았다. 아무도 8088이 IBM PC에 통합 된 후 "패밀리"로 발전하는 것을 예견하지 않았으며, 이전 버전과의 호환성 때문에 인텔은 32 비트 레지스터에서 "E"와 같은 체계를 유지해야했습니다.
비 역사적 부분은 모두 실용적입니다. 범용 레지스터에 문자를 사용하면 프로그램 카운터, 플래그 또는 스택 포인터와 같은 특수 레지스터의 이름과 혼동 될 수있는 문자를 제거 할 경우 26 개로 제한됩니다.
확인할 소스가 없지만 R
64 비트 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 등)는 태양이 타 버릴 때까지 계속 유지됩니다.
r0
- r7
, 또는 사용하는 UAX
대신 r8
등 . "레지스터의 이름을 가장 잘 지정하는 방법은 실제로 레지스터 확장을 수행하는 데있어 가장 어려운 부분 중 하나였습니다." ( 다른 깔끔한 x86-64 기록에 대해서는 stackoverflow.com/a/35619528/224132 를 참조하십시오 .) 또한 이진 인코딩의 순서는 RAX / RBX / ...가 아니며 AX, CX, DX, BX
이전 프로세서에서는 모든 레지스터가 같지 않았습니다.
따라서 가산기가 관여 할 때 하나의 특정 레지스터가 항상 관련되어 있다고 가정하면 칩이 덜 복잡해지고 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과 동의어 일뿐입니다.
면책 조항 : 위의 역사에 대한 견해입니다. 내가 역사의 초기 부분을 직접 목격하지 않았기 때문에 불완전 할 것입니다. 그럼에도 불구하고, 나는 그것이 일부 사람들에게 유용하기를 바랍니다.
INX
또는 INY
코드가 추가 바이트를 차지하지만,을,. 나는 그 칩을 위해 많은 어셈블리를 썼고 실제로 그것을 필요로하는 수학을하는 것 외에는 그 종류의 증분이 드물었다.
ADD 1
작동하므로 전문화 된 '증가 A'가 필요하지 않았습니다. 그리고 나는 그것을 필요로하는 것을 기억하지 않습니다.
그것은 단지 '등록'을 의미합니다. 역사적 이유로.