프로세서 레지스터

레지스터 전송 수준 (RTL)으로 구현된 8비트 레지스터에 대한 상세 설명으로, [[플립플롭을 사용하여 8비트 데이터를 저장하는 방법을 보여준다.]] **프로세서 레지스터**(processor register, 순화 용어: 기록기) 또는 단순히 **레지스터**는 컴퓨터의 프로세서에서 빠르게 접근할 수 있는 위치이다.language=en 레지스터는 일반적으로 소량의 빠른 저장 공간으로 구성되지만, 일부 레지스터는 특정 하드웨어 기능을 가지며 읽기 전용 또는 쓰기 전용일 수 있다. 컴퓨터 구조에서 레지스터는 일반적으로 주기억장치와는 다른 메커니즘으로 주소 지정되지만, DEC PDP-10, ICT 1900 등과 같이 메모리 주소가 할당될 수도 있다.url=https://www.researchgate.net/publication/303802254 로드-스토어 아키텍처 여부에 관계없이 거의 모든 컴퓨터는 더 큰 메모리에서 데이터를 레지스터로 로드한 다음, 해당 데이터를 산술, 비트 연산 및 기타 작업에 사용하며, 기계어 명령어를 통해 조작하거나 테스트한다. 조작된 항목은 동일한 명령어 또는 후속 명령어에 의해 종종 다시 주기억장치에 저장된다. 최신 프로세서는 주기억장치로 정적 또는 동적 RAM을 사용하며, 후자는 일반적으로 하나 이상의 캐시 레벨을 통해 접근된다. 프로세서 레지스터는 일반적으로 메모리 계층 구조의 최상단에 있으며, 데이터에 접근하는 가장 빠른 방법을 제공한다. 이 용어는 일반적으로 명령어 집합에 정의된 대로 명령어의 일부로 직접 인코딩된 레지스터 그룹만을 지칭한다. 그러나 최신 고성능 CPU는 레지스터 이름 변경을 통해 성능을 향상시키기 위해 이러한 "아키텍처 레지스터"의 복사본을 자주 보유하여 병렬 및 투기적 실행을 허용한다. 최신 X86 설계는 펜티엄 프로, 사이릭스 6x86, Nx586 및 AMD K5의 출시와 함께 1995년경에 이러한 기술을 도입했다. 컴퓨터 프로그램이 동일한 데이터에 반복적으로 접근하는 것을 참조 국부성이라고 한다. 자주 사용되는 값을 레지스터에 보관하는 것은 프로그램 성능에 매우 중요하다. 레지스터 할당은 컴파일러의 코드 생성 단계에서 수행되거나 어셈블리어 프로그래머에 의해 수동으로 수행된다.
# RS크기
레지스터는 일반적으로 저장할 수 있는 비트 수로 측정된다. 예를 들어, 8비트 레지스터, 32비트 레지스터, 64비트 레지스터, 128비트 레지스터 등이 있다. 일부 명령어 집합에서는 레지스터가 다양한 모드에서 작동하여 저장 메모리를 더 작은 부분(예: 32비트를 4개의 8비트로)으로 분할하여 여러 데이터(벡터 또는 1차원 배열 데이터)를 동시에 로드하고 처리할 수 있다. 일반적으로 이는 메모리를 더 큰 레지스터에 매핑하는 추가 레지스터를 추가하여 구현된다. 여러 데이터에 대해 단일 명령어를 실행할 수 있는 프로세서를 벡터 프로세서라고 한다.
# 유형
프로세서에는 종종 여러 종류의 레지스터가 포함되어 있으며, 저장할 수 있는 값의 유형 또는 작동하는 명령어에 따라 분류할 수 있다. * **사용자 접근 가능 레지스터**는 기계어 명령어로 읽거나 쓸 수 있다. 사용자 접근 가능 레지스터의 가장 일반적인 구분은 데이터 레지스터와 주소 레지스터로 구분하는 것이다. ** **데이터 레지스터**는 숫자 데이터 값 (예: 정수)과 일부 아키텍처에서는 부동소수점 수, 문자, 작은 비트 배열 및 기타 데이터를 저장할 수 있다. IBM 704, IBM 709 및 후속 기종, PDP-1, PDP-4/PDP-7/PDP-9/PDP-15, PDP-5/PDP-8, HP 2100과 같은 일부 구형 아키텍처에서는 누산기로 알려진 특별한 데이터 레지스터가 많은 연산에 암시적으로 사용된다. ** **주소 레지스터**는 주소를 저장하며 주기억장치에 간접적으로 접근하는 명령어에 의해 사용된다. *** 일부 프로세서에는 주소만 저장하거나 숫자 값만 저장하는 데 사용될 수 있는 레지스터(일부 경우에는 특정 주소에서 오프셋으로 값이 추가되는 인덱스 레지스터로 사용)가 포함되어 있다. 다른 프로세서는 레지스터가 두 종류의 양을 모두 저장할 수 있도록 허용한다. 피연산자의 유효 주소를 지정하는 데 사용되는 다양한 주소 지정 방식이 존재한다. *** **스택 포인터와 프레임 포인터**는 콜 스택을 관리하는 데 사용된다. 드물게 다른 스택은 전용 주소 레지스터에 의해 주소 지정된다( 스택 머신 참조). ** **범용 레지스터** (GPRs)는 데이터와 주소를 모두 저장할 수 있다. 즉, 데이터/주소 결합 레지스터이다. 일부 아키텍처에서는 레지스터 파일이 통합되어 GPR이 부동소수점 숫자도 저장할 수 있다. ** **부동소수점 레지스터** (FPRs)는 많은 아키텍처에서 부동소수점 숫자를 저장한다. ** **상수 레지스터**는 0, 1 또는 원주율과 같은 읽기 전용 값을 저장한다. ** **벡터 레지스터**는 SIMD 명령어(단일 명령어, 다중 데이터)에 의해 수행되는 벡터 처리를 위한 데이터를 저장한다. ** **상태 레지스터**는 특정 명령어가 실행되어야 하는지 또는 실행되지 않아야 하는지를 결정하는 데 자주 사용되는 진릿값을 저장한다. ** **특수 목적 레지스터** (SPRs)는 프로그램 상태의 일부 요소를 저장한다. 여기에는 일반적으로 명령 포인터라고도 불리는 프로그램 카운터와 상태 레지스터가 포함된다. 프로그램 카운터와 상태 레지스터는 프로그램 상태 워드 (PSW) 레지스터로 결합될 수 있다. 앞서 언급된 스택 포인터도 때때로 이 그룹에 포함된다. 마이크로컨트롤러와 같은 임베디드 마이크로프로세서는 특수 하드웨어 요소에 해당하는 특수 기능 레지스터를 가질 수도 있다. ** **제어 레지스터**는 CPU와 같은 시스템 구성 요소의 동작을 설정하는 데 사용된다. *** **모델별 레지스터** (기계별 레지스터라고도 함)는 프로세서 자체와 관련된 데이터 및 설정을 저장한다. 그 의미가 특정 프로세서의 설계에 연결되어 있으므로 프로세서 세대 간에 표준으로 유지될 것으로 예상되지 않는다. *** **메모리 유형 범위 레지스터** (MTRRs) * **내부 레지스터**는 명령어로 접근할 수 없으며 프로세서 작업에 내부적으로 사용된다. ** **명령 레지스터**는 현재 실행 중인 명령어를 저장한다. ** RAM에서 정보를 가져오는 것과 관련된 레지스터, 즉 CPU와 별도의 칩에 위치한 저장 레지스터 모음: *** **메모리 버퍼 레지스터** (MBR), 메모리 데이터 레지스터 (MDR)라고도 함 *** **기억 장치 주소 레지스터** (MAR) * **아키텍처 레지스터**ARCHITECTURAL는 소프트웨어에 보이는 레지스터이며 아키텍처에 의해 정의된다. 레지스터 이름 변경이 기본 하드웨어에 의해 수행되는 경우 물리적 하드웨어와 일치하지 않을 수 있다. **하드웨어 레지스터**는 비슷하지만 CPU 외부에 존재한다. 일부 아키텍처(예: SPARC 및 MIPS)에서는 정수 레지스터 파일의 첫 번째 또는 마지막 레지스터가 읽을 때 항상 0을 반환하도록 하드와이어되어 있는 의사 레지스터이다(주로 인덱싱 모드를 단순화하기 위함). 이 레지스터는 덮어쓸 수 없다. 알파에서도 부동소수점 레지스터 파일에 대해 동일한 방식으로 구현된다. 이로 인해 레지스터 파일은 실제로 사용 가능한 레지스터 수보다 하나 더 많은 레지스터를 가진 것으로 흔히 인용된다. 예를 들어, 31개의 레지스터만 위에서 정의한 레지스터 정의에 부합하더라도 32개의 레지스터가 있다고 인용된다.
# 예시
다음 표는 여러 주류 CPU 아키텍처의 레지스터 수를 보여준다. X86 호환 프로세서에서 스택 포인터(`ESP`)는 내용에 대해 사용할 수 있는 명령어 수가 제한적임에도 불구하고 정수 레지스터로 계산된다는 점에 유의해야 한다. 유사한 주의 사항은 대부분의 아키텍처에도 적용된다. 아래 나열된 아키텍처는 모두 다르지만, 거의 모두 헝가리계 미국인 수학자 존 폰 노이만이 처음 제안한 폰 노이만 구조로 알려진 기본 배열로 구성되어 있다. GPU의 레지스터 수가 CPU보다 훨씬 많다는 점도 주목할 만하다. 상단 고정 {| class="wikitable sortable sticky-header" align="left" ! 아키텍처 ! GPRs/데이터+주소 레지스터 ! FP 레지스터 ! 비고 |- | AT&T; 호빗 || | 000 || | 7개의 스택 || 모든 데이터 조작 명령은 레지스터 내에서만 작동하며, 데이터는 처리 전에 레지스터로 이동되어야 한다. |- | 크레이-1archive-date=2021-11-07 || | 스칼라 데이터 8개, 주소 8개 || | 스칼라 8개, 벡터 8개 (64개 요소) | 스칼라 데이터 레지스터는 정수 또는 부동소수점일 수 있으며, 64개의 스칼라 스크래치패드 T 레지스터와 64개의 주소 스크래치패드 B 레지스터도 있다. |- | 4004archive-date=2005-02-24 || | 누산기 1개, 기타 16개 || | 000 || |- | 8008archive-date=2007-10-04 || | 누산기 1개, 기타 6개 || | 000 || A 레지스터는 모든 산술이 수행되는 누산기이다. H 및 L 레지스터는 조합하여 주소 레지스터로 사용할 수 있다. 모든 레지스터는 로드/저장/이동/증가/감소 명령의 피연산자로, 산술 명령의 소스 피연산자로 사용할 수 있다. 부동소수점 장치 (FPU)는 제공되지 않는다. |- | 8080archive-date=2010-12-06 || | 누산기 1개, 기타 6개, 스택 포인터 1개|| | 000 || A 레지스터는 모든 산술이 수행되는 누산기이다. B·C, D·E, H·L 레지스터 쌍은 일부 명령에서 주소 레지스터로 사용할 수 있지만, ALU 명령은 H·L만 메모리 피연산자의 포인터로 사용할 수 있다. 모든 레지스터는 로드/저장/이동/증가/감소 명령의 피연산자로, 산술 명령의 소스 피연산자로 사용할 수 있다. 8080용 부동소수점 프로세서는 인텔 8231, AMD Am9511, 인텔 8232였다. 이들은 Z80 및 유사 프로세서와도 쉽게 사용할 수 있었다. |- | Z80url-status=live || | 17개: 누산기 1개, 기타 6개, 대체 누산기 1개, 대체 기타 6개, 인덱스 레지스터 2개, 스택 포인터 1개|| | 000 || Z80은 8080의 레지스터 세트를 확장했다. 누산기와 플래그는 대체 레지스터와 교환할 수 있다. 다른 6개의 레지스터는 그룹으로 대체 레지스터와 교환할 수 있다. 새로운 인덱스 레지스터(IX 또는 IY + 변위)는 일반적으로 HL을 대체할 수 있다. |- | iAPX432 || | 000 || | 6개의 스택 || 스택 머신 |- | 16비트 x86archive-date=2015-07-23 || | 008 || | 8개 스택 (FP 존재 시) | 인텔 8086/인텔 8088, 인텔 80186/인텔 80188, 인텔 80286 프로세서는 부동소수점 연산을 위한 인텔 8087, 인텔 80187 또는 인텔 80287 코프로세서가 제공될 경우, 스택 상단에 상대적인 레지스터를 피연산자로 사용할 수 있는 일부 명령어를 지원하는 80비트 너비, 8깊이 레지스터 스택을 지원한다. 코프로세서가 없는 경우 부동소수점 레지스터는 지원되지 않는다. |- | IA-32publisher=인텔 || | 008 || | 8개 스택 (FP 존재 시), 8개 (SSE/MMX 존재 시) | 인텔 80386 프로세서는 부동소수점 연산을 위해 인텔 80387을 필요로 했으며, 이후 프로세서에는 부동소수점이 내장되었다. 이들 모두는 스택 상단에 상대적인 레지스터를 피연산자로 사용할 수 있는 일부 명령어를 지원하는 80비트 너비, 8깊이 레지스터 스택을 가지고 있었다. 펜티엄 III 이후에는 추가적인 128비트 XMM 레지스터가 있는 스트리밍 SIMD 확장이 있었다. |- | X86-64date=October 2013 || | 016 || | 16 또는 32 (AVX-512 사용 가능 시) | FP 레지스터는 128비트 XMM 레지스터이며, 이후 AVX/AVX2로 256비트 YMM 레지스터로 확장되었고, AVX-512로 512비트 ZMM0-ZMM31 레지스터로 확장되었다.date=January 2018 |- | 페어차일드 F8publisher=페어차일드 || | 누산기 1개, 스크래치패드 레지스터 64개, 간접 스크래치패드 레지스터(ISAR) 1개 || 빈칸 || 명령어는 처음 16개의 스크래치패드 레지스터를 직접 참조할 수 있으며, ISAR을 통해 모든 스크래치패드 레지스터에 간접적으로 접근할 수 있다.year=1977 |- | 지오드 GX || | 데이터 1개, 주소 1개 || | 008 || Geode GX/미디어 GX/4x86/5x86은 사이릭스/내셔널 세미컨덕터가 만든 486/펜티엄 호환 프로세서의 에뮬레이션이다. 트랜스메타와 마찬가지로 프로세서에는 x86 코드를 네이티브 코드로 변환하여 실행하는 변환 계층이 있었다. 128비트 SSE 레지스터는 지원하지 않고, 8개의 80비트 부동소수점 레지스터로 구성된 80387 스택만 지원하며, AMD의 3D나우!를 부분적으로 지원한다. 네이티브 프로세서는 모든 목적을 위해 데이터 레지스터 1개와 주소 레지스터 1개만 포함하며, 정수 연산을 위해 스크래치패드 SRAM 내에서 32비트 명명 레지스터 r1(기본), r2(데이터), r3(백 포인터), r4(스택 포인터)의 4개 경로로 번역된다. |- | V.Smile|선플러스 μ'nSP || | 8개 (sp, r1-r4, bp, sr, pc) || | 000 || 대만 회사 선플러스 테크놀로지의 16비트 프로세서로, 특히 VTech의 V.Smile 교육용 비디오 게임 콘솔 라인과 2000년대 중반부터 많은 플러그인 TV 게임 및 비브랜드 콘솔에 사용되었다. |- | VM 랩스 누온 || | 000 || | 001 || VM 랩스가 개발하고 멀티미디어에 특화된 32비트 스택 머신 프로세서이다. 이 회사의 누온 DVD 플레이어 콘솔 라인과 ZaPit 게임즈의 게임 웨이브 패밀리 엔터테인먼트 시스템에서 찾아볼 수 있다. 이 디자인은 인텔의 MMX 기술에 크게 영향을 받았으며, 벡터 및 스칼라 명령 모두를 위한 128바이트 통합 스택 캐시를 포함했다. 통합 캐시는 뱅크 이름 변경을 통해 8개의 128비트 벡터 레지스터 또는 32개의 32비트 SIMD 스칼라 레지스터로 나눌 수 있으며, 이 아키텍처에는 정수 레지스터가 없다. |- | Nios IIdate=April 2, 2015date=April 2, 2015 || | 031 || | 008 || Nios II는 MIPS IV 명령어 집합을 기반으로 하며 31개의 32비트 GPR을 가지며, 레지스터 0은 0으로 고정되어 있고, 8개의 64비트 부동소수점 레지스터가 있다. |- | 모토로라 6800url-status=live || | 누산기 2개, 인덱스 1개, 스택 1개 || | 000 || |- | 모토로라 68kaccess-date=November 10, 2024 || | 데이터 8개 (d0-d7), 주소 8개 (a0-a7) || | 008 (FP 존재 시) | 주소 레지스터 8(a7)은 스택 포인터이다. 68000, 68010, 68012, 68020, 68030은 부동소수점을 위해 FPU를 필요로 했다. 68040은 FPU가 내장되어 있었다. FP 레지스터는 80비트이다. |- | 슈퍼H || | 0016 || | 006 || 16비트 명령어 버전 (SH-5 이전) |- | 이모션 엔진 || | 3(VU0)+ 32(VU1) || | 32 SIMD (UV1 통합) \+ 2 × 32 벡터 (GPU 근처에 전용 벡터 코프로세서 위치) | 이모션 엔진의 메인 코어(VU0)는 일반적인 백그라운드 작업을 위한 크게 수정된 DSP 일반 코어이며, 64비트 누산기 1개, 일반 데이터 레지스터 2개, 32비트 프로그램 카운터 1개를 포함한다. 수정된 MIPS III 실행 코어(VU1)는 게임 데이터 및 프로토콜 제어를 위한 것이며, 정수 연산을 위한 32개의 32비트 범용 레지스터와 SIMD 명령어, 스트리밍 데이터 값 및 일부 정수 계산 값을 저장하기 위한 32개의 128비트 SIMD 레지스터, 그리고 일반 부동소수점 계산을 코프로세서의 벡터 레지스터 파일에 연결하기 위한 누산기 레지스터 1개를 포함한다. 코프로세서는 32개의 128비트 벡터 레지스터 파일(CPU의 누산기에서 전달되는 벡터 값만 저장할 수 있음)로 구성되며 정수 레지스터는 내장되어 있지 않다. 벡터 코프로세서(VPU 0/1)와 이모션 엔진의 전체 메인 프로세서 모듈(VU0 + VU1 + VPU0 + VPU1)은 모두 수정된 MIPS 명령어 세트를 기반으로 구축되었다. 이 경우 누산기는 범용이 아니라 제어 상태이다. |- | CUDACUDAaccess-date=Jan 9, 2020 || | 구성 가능, 스레드당 최대 255개 || 이전 세대는 스레드당 최대 127/63개의 레지스터를 허용했다(테슬라/페르미). 스레드당 더 많은 레지스터가 구성될수록 동시에 실행될 수 있는 스레드 수는 줄어든다. 레지스터는 32비트 너비이므로 배정밀도 부동소수점 숫자와 64비트 포인터는 두 개의 레지스터가 필요하다. 또한 스레드당 최대 8개의 프레디케이트 레지스터가 있다.class=cs.DC |- | CDC 6000 시리즈date=July 1965 || | 016 || | 008 || 8개의 'A' 레지스터(A0–A7)는 18비트 주소를 보유하고, 8개의 'B' 레지스터(B0–B7)는 18비트 정수 값을 보유하며(B0는 영구적으로 0으로 설정됨), 8개의 'X' 레지스터(X0–X7)는 60비트의 정수 또는 부동소수점 데이터를 보유한다. 8개의 18비트 A 레지스터 중 7개는 해당 X 레지스터와 연결되어 있었다. A1–A5 레지스터 중 하나를 값으로 설정하면 해당 주소의 내용이 해당 X 레지스터로 메모리 로드되었다. 마찬가지로 A6 또는 A7 레지스터에 주소를 설정하면 X6 또는 X7에서 해당 메모리 위치로 메모리 저장되었다. (A0 및 X0 레지스터는 이렇게 연결되지 않았다). |- | IBM 시스템/360 아키텍처,date= IBM 시스템/370,date=September 1, 1975 IBM 시스템/390, Z/아키텍처edition=Seventh || | 016 || | 4 (FP가 있는 경우); G5 및 이후 S/390 모델 및 z/아키텍처에서는 16개 | FP는 System/360에서 선택 사항이었고, S/370 및 이후 버전에서는 항상 존재했다. 벡터 기능이 있는 프로세서에는 머신에 따라 32비트 요소 수가 다른 16개의 벡터 레지스터가 있다.access-date=May 11, 2020 일부 레지스터는 호출 규약에 따라 고정된 용도로 할당된다. 예를 들어, 레지스터 14는 서브루틴 반환 주소에 사용되며, ELF ABI의 경우 레지스터 15는 스택 포인터로 사용된다. S/390 G5 프로세서는 부동소수점 레지스터 수를 16개로 늘렸다.title=IBM S/390 G5 Microprocessor |- | MMIXtitle=MMIX Home Page || | 256 || | 256 || 1990년대 후반 도널드 커누스가 교육 목적으로 설계한 명령어 집합이다. |- | NS320xxurl-status=live || | 008 || | 008 (FP가 있는 경우) | |- | Xelerated X10 || | 001 || | 032 || 수정된 MIPS 명령어 집합과 128비트 부동소수점 장치를 갖춘 32/40비트 스택 머신 기반 네트워크 프로세서이다. |- | Parallax Propeller || | 000 || | 002 || 단순한 논리 회로를 내부에 가진 8코어 8/16비트 슬라이스드 스택 머신 컨트롤러로, 각각 3개의 8/16비트 특수 제어 레지스터와 32비트 x 512 스택 RAM을 포함하는 8개의 코그 카운터(코어)를 가지고 있다. 그러나 정수용 범용 레지스터는 포함하지 않는다. 최신 프로세서 및 멀티 코어 시스템의 대부분의 섀도우 레지스터 파일과 달리, 코그의 모든 스택 RAM은 명령어 수준에서 접근할 수 있어, 필요한 경우 이 모든 코그가 단일 범용 코어처럼 작동할 수 있다. 부동소수점 장치는 외부에 있으며, 2개의 80비트 벡터 레지스터를 포함한다. |- | 아이테니엄publisher=Intel || | 128 || | 128 || 그리고 64개의 1비트 프레디케이트 레지스터와 8개의 분기 레지스터. FP 레지스터는 82비트이다. |- | SPARCeditor-first2=Tom || | 031 || | 032 || 글로벌 레지스터 0은 0으로 하드와이어되어 있다. 레지스터 윈도를 사용한다. |- | IBM POWER || | 032 || | 032 || 또한 링크 레지스터, 카운트 레지스터 및 곱셈 몫(MQ) 레지스터가 포함된다. |- | 파워PC/Power ISApublisher=OpenPOWER Foundation || | 032 || | 032 || 링크 레지스터와 카운트 레지스터도 포함된다. 벡터 기능을 지원하는 프로세서에는 32개의 128비트 벡터 레지스터도 있다. |- | 블랙핀publisher=Analog Devices || | 8 데이터, 2 누산기, 6 주소 || | 000 || 스택 포인터와 프레임 포인터도 포함된다. 추가 레지스터는 제로 오버헤드 루프 및 순환 버퍼 DAG(데이터 주소 생성기)를 구현하는 데 사용된다. |- | IBM Cell SPE || | 128 || 정수, 주소 또는 부동소수점 값을 저장할 수 있는 128개의 범용 레지스터date=January 27, 2007 |- | DEC PDP-10 || | 016 || 모든 레지스터는 일반적으로 사용될 수 있다(정수, 부동소수점, 스택 포인터, 점프, 인덱싱 등). 모든 36비트 메모리(또는 레지스터) 워드는 하프 워드로도 조작될 수 있으며, 이는 (18비트) 주소로 간주될 수 있다. 특정 명령어에 의해 다른 워드 해석이 사용된다. 원래 PDP-10 프로세서에서는 이 16개의 GPR도 주(즉, 코어) 메모리 위치 0–15에 해당했다. "빠른 메모리"라는 하드웨어 옵션은 레지스터를 별도의 IC로 구현했으며, 메모리 위치 0–15에 대한 참조는 IC 레지스터를 참조했다. 이후 모델에서는 레지스터를 "빠른 메모리"로 구현하고 메모리 위치 0–15를 계속 참조하도록 했다. 이동 명령어는 (레지스터, 메모리) 피연산자를 취한다: MOVE 1,2는 레지스터-레지스터이고, MOVE 1,1000은 메모리-레지스터이다. |- | DEC PDP-11 || | 007 || | 006 (FPP가 있는 경우) | R7은 프로그램 카운터이다. 모든 레지스터는 스택 포인터로 사용될 수 있지만 R6은 하드웨어 인터럽트 및 트랩에 사용된다. |- | DEC VAXdate= 1987 || | 016 || 범용 레지스터는 부동소수점 값에도 사용된다. 세 개의 레지스터는 특별한 용도로 사용된다: R12 (인수 포인터), R13 (프레임 포인터), R14 (스택 포인터), 반면 R15는 프로그램 카운터를 참조한다. |- | Alphadate=January 2002 || | 031 || | 031 || 레지스터 R31(정수) 및 F31(부동소수점)은 0으로 하드와이어되어 있다. |- | MOS Technology 6502 || | 1 누산기, 2 인덱스, 1 스택|| | 000 ||A(누산기) 레지스터는 모든 ALU 연산의 대상이다. X와 Y는 각각 간접 및 직접 인덱스 레지스터이다. S(스택 포인터) 레지스터는 스택의 맨 위를 가리킨다. |- | W65C816S || | 001 || | 000 || 65c816은 6502의 16비트 후속작이다. X, Y, D(직접 페이지 레지스터)는 조건 레지스터이며 SP 레지스터는 특정 인덱스 전용이다. 메인 누산기는 16비트(C)로 확장되었으며access-date=14 November 2019 호환성을 위해 8비트(A)를 유지하며, 메인 레지스터는 이제 최대 24비트(16비트 너비 데이터 명령어/24비트 메모리 주소)를 주소 지정할 수 있다. |- | MeP || | 004 || | 008 || 미디어 임베디드 프로세서는 도시바가 개발한 32비트 프로세서로, 수정된 8080 명령어 세트를 사용했다. A, B, C, D 레지스터만 모든 모드(8/16/32비트)에서 사용할 수 있다. x86과는 호환되지 않지만, x87과 호환되는 80비트 부동소수점 장치를 포함한다. |- | PIC 마이크로컨트롤러 || | 001 || | 000 || 기본 PIC 아키텍처에는 메모리를 인덱싱하는 메커니즘이 없다. |- | Atmel AVR 마이크로컨트롤러 || | 032 || | 000 || |- | ARM 32비트 (ARM/A32, Thumb-2/T32) || | 014 || | 다양 (최대 32개) | r15는 프로그램 카운터이며 범용 레지스터로 사용할 수 없다. r13은 스택 포인터이다. r8–r13은 프로세서 모드 전환 시 다른 레지스터(뱅크드)로 교체될 수 있다. 이전 버전은 26비트 주소 지정 방식을 사용했으며,access-date=27 May 2013 프로그램 카운터(r15)의 상위 비트를 상태 플래그에 사용하여 해당 레지스터를 32비트로 만들었다. |- | ARM 32비트 (Thumb) || | 008 || | 016 || Thumb 버전 1은 r0부터 r7까지의 레지스터에 대한 접근만 지원했다.publisher=ARM 홀딩스 |- | ARM 64비트 (A64)date=2021|| | 031 || | 032 || 레지스터 r31은 컨텍스트에 따라 스택 포인터이거나 0으로 하드와이어된다. |- | MIPSaccess-date=October 6, 2024 || | 031 || | 032 || 정수 레지스터 0은 0으로 하드와이어되어 있다. |- | RISC-Veditor-first2=Krste || | 031 || | 032 || 정수 레지스터 0은 0으로 하드와이어되어 있다. 매우 제한된 자원을 가진 시스템을 위한 RV32E 변형은 15개의 정수 레지스터를 가지고 있다. |- | Epiphany || | 64 (코어당)title=Epiphany Architecture Reference || 각 명령어는 레지스터를 정수로 해석할지 단정밀도 부동소수점으로 해석할지 제어한다. 아키텍처는 4096 코어까지 확장 가능하며, 현재 16 및 64 코어 구현이 가능하다. |} -
# 용법
프로세서에서 사용할 수 있는 레지스터 수와 이 레지스터를 사용하여 수행할 수 있는 연산은 최적화 컴파일러가 생성하는 코드의 효율성에 상당한 영향을 미친다. 표현식 트리의 스트라흘러 수는 해당 표현식 트리를 평가하는 데 필요한 최소 레지스터 수를 나타낸다.