본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
최근 바뀜
요즘 화제
임의의 문서로
sitesupport
사용자 모임
사랑방
사용자 모임
관리 요청
편집 안내
소개
도움말
정책과 지침
질문방
한울위키
검색
검색
보이기
로그인
개인 도구
로그인
프로세서 레지스터 문서 원본 보기
문서
토론
한국어
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
보이기
사이드바로 이동
숨기기
←
프로세서 레지스터
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
일반 사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
[[파일:Register.svg|섬네일|400px|[[레지스터 전송 수준]] (RTL)으로 구현된 8비트 레지스터에 대한 상세 설명으로, [[플립플롭]]을 사용하여 8비트 데이터를 저장하는 방법을 보여준다.]] '''프로세서 레지스터'''({{llang|en|processor register}}, <small>[[한국어 순화|순화 용어]]:</small> 기록기) 또는 단순히 '''레지스터'''는 컴퓨터의 [[프로세서 (컴퓨팅)|프로세서]]에서 빠르게 접근할 수 있는 위치이다.<ref>{{웹 인용|title=What is a processor register? |url=https://www.educative.io/answers/what-is-a-processor-register |access-date=2022-08-12 |website=Educative: Interactive Courses for Software Developers |language=en}}</ref> 레지스터는 일반적으로 소량의 빠른 [[컴퓨터 데이터 저장|저장 공간]]으로 구성되지만, 일부 레지스터는 특정 하드웨어 기능을 가지며 읽기 전용 또는 쓰기 전용일 수 있다. [[컴퓨터 구조]]에서 레지스터는 일반적으로 [[주기억장치]]와는 다른 메커니즘으로 주소 지정되지만, DEC [[PDP-10]], [[ICT 1900 시리즈|ICT 1900]] 등과 같이 [[메모리 주소]]가 할당될 수도 있다.<ref>{{웹 인용|title=A Survey of Techniques for Designing and Managing CPU Register File |url=https://www.researchgate.net/publication/303802254}}</ref> [[로드-스토어 아키텍처]] 여부에 관계없이 거의 모든 컴퓨터는 더 큰 메모리에서 데이터를 레지스터로 로드한 다음, 해당 데이터를 [[산술 논리 장치|산술]], [[비트 연산]] 및 기타 작업에 사용하며, [[기계어|기계어 명령어]]를 통해 조작하거나 테스트한다. 조작된 항목은 동일한 명령어 또는 후속 명령어에 의해 종종 다시 주기억장치에 저장된다. 최신 프로세서는 주기억장치로 [[정적 램|정적]] 또는 [[동적 램|동적]] [[랜덤 액세스 메모리|RAM]]을 사용하며, 후자는 일반적으로 하나 이상의 [[CPU 캐시#다단계 캐시|캐시 레벨]]을 통해 접근된다. 프로세서 레지스터는 일반적으로 [[메모리 계층 구조]]의 최상단에 있으며, 데이터에 접근하는 가장 빠른 방법을 제공한다. 이 용어는 일반적으로 [[명령어 집합]]에 정의된 대로 명령어의 일부로 직접 인코딩된 레지스터 그룹만을 지칭한다. 그러나 최신 고성능 CPU는 [[레지스터 이름 변경]]을 통해 성능을 향상시키기 위해 이러한 "아키텍처 레지스터"의 복사본을 자주 보유하여 [[명령어 수준 병렬성|병렬]] 및 [[투기적 실행]]을 허용한다. 최신 [[X86]] 설계는 [[펜티엄 프로]], [[사이릭스 6x86]], Nx586 및 [[AMD K5]]의 출시와 함께 1995년경에 이러한 기술을 도입했다. [[컴퓨터 프로그램]]이 동일한 데이터에 반복적으로 접근하는 것을 [[참조 국부성]]이라고 한다. 자주 사용되는 값을 레지스터에 보관하는 것은 프로그램 성능에 매우 중요하다. [[레지스터 할당]]은 [[컴파일러]]의 [[코드 생성 (컴파일러)|코드 생성]] 단계에서 수행되거나 [[어셈블리어]] 프로그래머에 의해 수동으로 수행된다. == {{앵커|RS}}크기 == 레지스터는 일반적으로 저장할 수 있는 [[비트 (단위)|비트]] 수로 측정된다. 예를 들어, [[8비트 컴퓨팅|8비트]] 레지스터, [[32비트 컴퓨팅|32비트]] 레지스터, [[64비트 컴퓨팅|64비트]] 레지스터, [[128비트 컴퓨팅|128비트]] 레지스터 등이 있다. 일부 [[명령어 집합]]에서는 레지스터가 다양한 모드에서 작동하여 저장 메모리를 더 작은 부분(예: 32비트를 4개의 8비트로)으로 분할하여 여러 데이터(벡터 또는 [[1차원 배열]] 데이터)를 동시에 로드하고 처리할 수 있다. 일반적으로 이는 메모리를 더 큰 레지스터에 매핑하는 추가 레지스터를 추가하여 구현된다. 여러 데이터에 대해 단일 명령어를 실행할 수 있는 프로세서를 [[벡터 프로세서]]라고 한다. ==유형== <!-- written insufficiently about accessibility from the machine code, but it is the most important classification --> <!-- TODO - glossary format? term/defn templates? --> 프로세서에는 종종 여러 종류의 레지스터가 포함되어 있으며, 저장할 수 있는 값의 유형 또는 작동하는 명령어에 따라 분류할 수 있다. * '''사용자 접근 가능 레지스터'''는 기계어 명령어로 읽거나 쓸 수 있다. 사용자 접근 가능 레지스터의 가장 일반적인 구분은 데이터 레지스터와 주소 레지스터로 구분하는 것이다. ** '''{{보이는 앵커|데이터 레지스터}}'''는 [[데이터 (컴퓨팅)|숫자 데이터 값]] (예: [[정수형|정수]])과 일부 아키텍처에서는 [[부동소수점 수]], [[문자 (컴퓨팅)|문자]], 작은 [[비트 배열]] 및 기타 데이터를 저장할 수 있다. [[IBM 704]], [[IBM 709]] 및 후속 기종, [[PDP-1]], PDP-4/PDP-7/PDP-9/PDP-15, PDP-5/[[PDP-8]], [[HP 2100]]과 같은 일부 구형 아키텍처에서는 [[누산기]]로 알려진 특별한 데이터 레지스터가 많은 연산에 암시적으로 사용된다. ** '''{{보이는 앵커|주소 레지스터}}'''는 [[메모리 주소|주소]]를 저장하며 [[주기억장치]]에 간접적으로 접근하는 명령어에 의해 사용된다. *** 일부 프로세서에는 주소만 저장하거나 숫자 값만 저장하는 데 사용될 수 있는 레지스터(일부 경우에는 특정 주소에서 오프셋으로 값이 추가되는 [[인덱스 레지스터]]로 사용)가 포함되어 있다. 다른 프로세서는 레지스터가 두 종류의 양을 모두 저장할 수 있도록 허용한다. 피연산자의 유효 주소를 지정하는 데 사용되는 다양한 [[주소 지정 방식]]이 존재한다. *** '''[[콜 스택#스택과 프레임 포인터|스택 포인터와 프레임 포인터]]'''는 [[콜 스택]]을 관리하는 데 사용된다. 드물게 다른 [[스택]]은 전용 주소 레지스터에 의해 주소 지정된다( [[스택 머신]] 참조). ** '''범용 레지스터''' ({{보이는 앵커|GPR}}s)는 데이터와 주소를 모두 저장할 수 있다. 즉, 데이터/주소 결합 레지스터이다. 일부 아키텍처에서는 [[레지스터 파일]]이 통합되어 GPR이 부동소수점 숫자도 저장할 수 있다. ** '''{{보이는 앵커|부동소수점 레지스터|FLOATING_POINT_REGISTER|부동소수점 레지스터}}''' (FPRs)는 많은 아키텍처에서 부동소수점 숫자를 저장한다. ** '''[[상수 (컴퓨터 프로그래밍)|상수]] 레지스터'''는 0, 1 또는 [[원주율]]과 같은 읽기 전용 값을 저장한다. ** '''{{보이는 앵커|벡터 레지스터}}'''는 [[단일 명령어, 다중 데이터|SIMD]] 명령어(단일 명령어, 다중 데이터)에 의해 수행되는 [[벡터 프로세서|벡터 처리]]를 위한 데이터를 저장한다. ** '''[[상태 레지스터]]'''는 특정 명령어가 실행되어야 하는지 또는 실행되지 않아야 하는지를 결정하는 데 자주 사용되는 [[진릿값]]을 저장한다. ** '''특수 목적 레지스터''' (SPRs)는 [[프로그램 상태]]의 일부 요소를 저장한다. 여기에는 일반적으로 명령 포인터라고도 불리는 [[프로그램 카운터]]와 [[상태 레지스터]]가 포함된다. 프로그램 카운터와 상태 레지스터는 [[프로그램 상태 워드]] (PSW) 레지스터로 결합될 수 있다. 앞서 언급된 스택 포인터도 때때로 이 그룹에 포함된다. [[마이크로컨트롤러]]와 같은 임베디드 마이크로프로세서는 특수 하드웨어 요소에 해당하는 [[특수 기능 레지스터]]를 가질 수도 있다. ** '''[[제어 레지스터]]'''는 [[중앙 처리 장치|CPU]]와 같은 시스템 구성 요소의 동작을 설정하는 데 사용된다. *** '''[[모델별 레지스터]]''' (기계별 레지스터라고도 함)는 프로세서 자체와 관련된 데이터 및 설정을 저장한다. 그 의미가 특정 프로세서의 설계에 연결되어 있으므로 프로세서 세대 간에 표준으로 유지될 것으로 예상되지 않는다. *** '''[[메모리 유형 범위 레지스터]]''' (MTRRs) * '''{{보이는 앵커|내부 레지스터}}'''는 명령어로 접근할 수 없으며 프로세서 작업에 내부적으로 사용된다. ** '''[[명령 레지스터]]'''는 현재 실행 중인 명령어를 저장한다. ** [[랜덤 액세스 메모리|RAM]]에서 정보를 가져오는 것과 관련된 레지스터, 즉 CPU와 별도의 칩에 위치한 저장 레지스터 모음: *** '''[[메모리 버퍼 레지스터]]''' (MBR), 메모리 데이터 레지스터 (MDR)라고도 함 *** '''[[기억 장치 주소 레지스터]]''' (MAR) * '''아키텍처 레지스터'''{{앵커|ARCHITECTURAL}}는 소프트웨어에 보이는 레지스터이며 아키텍처에 의해 정의된다. [[레지스터 이름 변경]]이 기본 하드웨어에 의해 수행되는 경우 물리적 하드웨어와 일치하지 않을 수 있다. '''[[하드웨어 레지스터]]'''는 비슷하지만 CPU 외부에 존재한다. 일부 아키텍처(예: [[SPARC]] 및 [[MIPS 아키텍처|MIPS]])에서는 정수 [[레지스터 파일]]의 첫 번째 또는 마지막 레지스터가 읽을 때 항상 0을 반환하도록 하드와이어되어 있는 [[제로 레지스터|의사 레지스터]]이다(주로 인덱싱 모드를 단순화하기 위함). 이 레지스터는 덮어쓸 수 없다. [[DEC 알파|알파]]에서도 부동소수점 레지스터 파일에 대해 동일한 방식으로 구현된다. 이로 인해 레지스터 파일은 실제로 사용 가능한 레지스터 수보다 하나 더 많은 레지스터를 가진 것으로 흔히 인용된다. 예를 들어, 31개의 레지스터만 위에서 정의한 레지스터 정의에 부합하더라도 32개의 레지스터가 있다고 인용된다. ==예시== 다음 표는 여러 주류 CPU 아키텍처의 레지스터 수를 보여준다. [[X86]] 호환 프로세서에서 스택 포인터(<code>ESP</code>)는 내용에 대해 사용할 수 있는 명령어 수가 제한적임에도 불구하고 정수 레지스터로 계산된다는 점에 유의해야 한다. 유사한 주의 사항은 대부분의 아키텍처에도 적용된다. 아래 나열된 아키텍처는 모두 다르지만, 거의 모두 헝가리계 미국인 [[수학자]] [[존 폰 노이만]]이 처음 제안한 [[폰 노이만 구조]]로 알려진 기본 배열로 구성되어 있다. [[그래픽 처리 장치|GPU]]의 레지스터 수가 [[중앙 처리 장치|CPU]]보다 훨씬 많다는 점도 주목할 만하다. {{상단 고정}} {| class="wikitable sortable sticky-header" align="left"<!--these are counts of registers, *not* counts of register sets, so do not add entries with counts of register sets or change counts of registers to counts of register sets--> ! 아키텍처 ! {{개행 금지|GPRs/데이터+주소 레지스터}} ! {{개행 금지|FP 레지스터}} ! 비고 |- | AT&T 호빗 || style="text-align:center;" | {{0|00}}0 || style="text-align:center;" | 7개의 스택 || 모든 데이터 조작 명령은 레지스터 내에서만 작동하며, 데이터는 처리 전에 레지스터로 이동되어야 한다. |- | 크레이-1<ref>{{웹 인용|url=http://www.bitsavers.org/pdf/cray/CRAY-1/2240004C_CRAY-1_Hardware_Reference_Nov77.pdf |title=Cray-1 Computer System Hardware Reference Manual |publisher=[[크레이 리서치]] |date=November 1977 |access-date=2022-12-23 |url-status=live |archive-url=https://web.archive.org/web/20211107213641/http://www.bitsavers.org/pdf/cray/CRAY-1/2240004C_CRAY-1_Hardware_Reference_Nov77.pdf |archive-date=2021-11-07}}</ref> || style="text-align:center;" | 스칼라 데이터 8개, 주소 8개 || style="text-align:center;" | 스칼라 8개, 벡터 8개 (64개 요소) | 스칼라 데이터 레지스터는 정수 또는 부동소수점일 수 있으며, 64개의 스칼라 스크래치패드 T 레지스터와 64개의 주소 스크래치패드 B 레지스터도 있다. |- | [[4004]]<ref>{{웹 인용|url=https://bitsavers.computerhistory.org/components/intel/MCS4/MCS-4_UsersManual_Feb73.pdf|url-status=live|title=MCS-4 Micro Computer Set Users Manual|publisher=인텔|date=February 1973|archive-url=https://web.archive.org/web/20050224073529/http://bitsavers.org/pdf/intel/MCS4/MCS-4_UsersManual_Feb73.pdf|archive-date=2005-02-24}}</ref> || style="text-align:center;" | 누산기 1개, 기타 16개 || style="text-align:center;" | {{0|00}}0 || |- | [[8008]]<ref>{{웹 인용|url=http://bitsavers.informatik.uni-stuttgart.de/components/intel/MCS8/Intel_8008_8-Bit_Parallel_Central_Processing_Unit_Rev4_Nov73.pdf|url-status=live|title=8008 8 Bit Parallel Central Processor Unit Users Manual|publisher=인텔|date=November 1973|access-date=January 23, 2014|archive-url=https://web.archive.org/web/20071004142917/http://bitsavers.org/pdf/intel/MCS8/8008usersManualRev4_Nov73.pdf|archive-date=2007-10-04}}</ref> || style="text-align:center;" | 누산기 1개, 기타 6개 || style="text-align:center;" | {{0|00}}0 || A 레지스터는 모든 산술이 수행되는 누산기이다. H 및 L 레지스터는 조합하여 주소 레지스터로 사용할 수 있다. 모든 레지스터는 로드/저장/이동/증가/감소 명령의 피연산자로, 산술 명령의 소스 피연산자로 사용할 수 있다. [[부동소수점 장치]] (FPU)는 제공되지 않는다. |- | [[8080]]<ref>{{웹 인용|url=https://bitsavers.trailing-edge.com/components/intel/MCS80/98-153B_Intel_8080_Microcomputer_Systems_Users_Manual_197509.pdf|url-status=live|title=Intel 8080 Microcomputer Systems User's Manual|publisher=인텔|date=September 1975|access-date=January 23, 2014|archive-url=https://web.archive.org/web/20101206220948/http://bitsavers.org/pdf/intel/MCS80/98-153B_Intel_8080_Microcomputer_Systems_Users_Manual_197509.pdf|archive-date=2010-12-06}}</ref> || style="text-align:center;" | 누산기 1개, 기타 6개, 스택 포인터 1개|| style="text-align:center;" | {{0|00}}0 || A 레지스터는 모든 산술이 수행되는 누산기이다. B·C, D·E, H·L 레지스터 쌍은 일부 명령에서 주소 레지스터로 사용할 수 있지만, ALU 명령은 H·L만 메모리 피연산자의 포인터로 사용할 수 있다. 모든 레지스터는 로드/저장/이동/증가/감소 명령의 피연산자로, 산술 명령의 소스 피연산자로 사용할 수 있다. 8080용 부동소수점 프로세서는 인텔 8231, AMD Am9511, 인텔 8232였다. 이들은 [[자일로그|Z80]] 및 유사 프로세서와도 쉽게 사용할 수 있었다. |- | [[자일로그 Z80|Z80]]<ref>{{서적 인용|url=https://www.zilog.com/docs/z80/um0080.pdf#G5.1012169 |title=Z80 Family CPU User Manual |publisher=[[자일로그]] |year=2016 |page=3 |id=UM008011-0816 |access-date=January 5, 2024 |archive-url=https://web.archive.org/web/20231226131929/http://www.zilog.com/docs/z80/um0080.pdf#G5.1012169 |archive-date=December 26, 2023 |url-status=live}}</ref> || style="text-align:center;" | 17개: 누산기 1개, 기타 6개, 대체 누산기 1개, 대체 기타 6개, 인덱스 레지스터 2개, 스택 포인터 1개|| style="text-align:center;" | {{0|00}}0 || Z80은 8080의 레지스터 세트를 확장했다. 누산기와 플래그는 대체 레지스터와 교환할 수 있다. 다른 6개의 레지스터는 그룹으로 대체 레지스터와 교환할 수 있다. 새로운 인덱스 레지스터(IX 또는 IY + 변위)는 일반적으로 HL을 대체할 수 있다. |- | [[iAPX432]] || style="text-align:center;" | {{0|00}}0 || style="text-align:center;" | 6개의 스택 || 스택 머신 |- | [[X86#16비트|16비트 x86]]<ref>{{웹 인용|url=https://bitsavers.trailing-edge.com/components/intel/80286/210498-005_80286_and_80287_Programmers_Reference_Manual_1987.pdf|url-status=live|title=80286 and 80287 Programmer's Reference Manual|publisher=인텔|year=1987|archive-url=https://web.archive.org/web/20150723132516/http://www.textfiles.com/bitsavers/pdf/intel/80286/210498-005_80286_and_80287_Programmers_Reference_Manual_1987.pdf|archive-date=2015-07-23}}</ref> || style="text-align:center;" | {{0|00}}8 || style="text-align:center;" | 8개 스택 (FP 존재 시) | [[인텔 8086]]/[[인텔 8088]], [[인텔 80186]]/[[인텔 80188]], [[인텔 80286]] 프로세서는 부동소수점 연산을 위한 [[인텔 8087]], 인텔 80187 또는 [[인텔 80287]] 코프로세서가 제공될 경우, 스택 상단에 상대적인 레지스터를 피연산자로 사용할 수 있는 일부 명령어를 지원하는 80비트 너비, 8깊이 레지스터 스택을 지원한다. 코프로세서가 없는 경우 부동소수점 레지스터는 지원되지 않는다. |- | [[IA-32]]<ref name="intel-x86-manuals">{{웹 인용|url=http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html|title=Intel 64 and IA-32 Architectures Software Developer Manuals|date=4 December 2019|publisher=인텔}}</ref> || style="text-align:center;" | {{0|00}}8 || style="text-align:center;" | 8개 스택 (FP 존재 시), 8개 (SSE/MMX 존재 시) | [[인텔 80386]] 프로세서는 부동소수점 연산을 위해 [[인텔 80387]]을 필요로 했으며, 이후 프로세서에는 부동소수점이 내장되었다. 이들 모두는 스택 상단에 상대적인 레지스터를 피연산자로 사용할 수 있는 일부 명령어를 지원하는 80비트 너비, 8깊이 레지스터 스택을 가지고 있었다. [[펜티엄 III]] 이후에는 추가적인 128비트 XMM 레지스터가 있는 [[스트리밍 SIMD 확장]]이 있었다. |- | [[X86-64]]<ref name="intel-x86-manuals"/><ref>{{웹 인용|url=https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24592.pdf|title=AMD64 Architecture Programmer's Manual Volume 1: Application Programming|publisher=[[AMD]]|date=October 2013}}</ref> || style="text-align:center;" | {{0|0}}16 || style="text-align:center;" | 16 또는 32 (AVX-512 사용 가능 시) | FP 레지스터는 128비트 XMM 레지스터이며, 이후 [[고급 벡터 확장|AVX/AVX2]]로 256비트 YMM 레지스터로 확장되었고, [[AVX-512]]로 512비트 ZMM0-ZMM31 레지스터로 확장되었다.<ref>{{웹 인용|url=https://software.intel.com/sites/default/files/managed/c5/15/architecture-instruction-set-extensions-programming-reference.pdf|title=Intel Architecture Instruction Set Extensions and Future Features Programming Reference|publisher=[[인텔]]|date=January 2018}}</ref> |- | [[페어차일드 F8]]<ref>{{서적 인용|url=https://datasheets.chipdb.org/Fairchild/F8/F8_prelimUM_Jan75.pdf|title=F8, Preliminary Microprocessor User's Manual|date=January 1975|publisher=페어차일드}}</ref> || style="text-align:center;" | 누산기 1개, 스크래치패드 레지스터 64개, 간접 스크래치패드 레지스터(ISAR) 1개 || {{빈칸}} || 명령어는 처음 16개의 스크래치패드 레지스터를 직접 참조할 수 있으며, ISAR을 통해 모든 스크래치패드 레지스터에 간접적으로 접근할 수 있다.<ref>{{서적 인용|url=http://www.bitsavers.org/components/fairchild/f8/F8_Guide_To_Programming_1977.pdf|title=F8 Guide to Programming|publisher=Fairchild MOS Microcomputer Division|year=1977}}</ref> |- | 지오드 GX || style="text-align:center;" | 데이터 1개, 주소 1개 || style="text-align:center;" | {{0|00}}8 || Geode GX/미디어 GX/[[4x86]]/[[Cyrix 5x86|5x86]]은 [[사이릭스]]/[[내셔널 세미컨덕터]]가 만든 486/펜티엄 호환 프로세서의 에뮬레이션이다. [[트랜스메타]]와 마찬가지로 프로세서에는 x86 코드를 네이티브 코드로 변환하여 실행하는 변환 계층이 있었다. 128비트 SSE 레지스터는 지원하지 않고, 8개의 80비트 부동소수점 레지스터로 구성된 80387 스택만 지원하며, AMD의 [[3D나우!]]를 부분적으로 지원한다. 네이티브 프로세서는 모든 목적을 위해 데이터 레지스터 1개와 주소 레지스터 1개만 포함하며, 정수 연산을 위해 스크래치패드 SRAM 내에서 32비트 명명 레지스터 r1(기본), r2(데이터), r3(백 포인터), r4(스택 포인터)의 4개 경로로 번역된다. |- | V.Smile|선플러스 μ'nSP || style="text-align:center;" | {{개행 금지|8개 (sp, r1-r4, bp, sr, pc)}} || style="text-align:center;" | {{0|00}}0 || 대만 회사 선플러스 테크놀로지의 16비트 프로세서로, 특히 VTech의 V.Smile 교육용 비디오 게임 콘솔 라인과 2000년대 중반부터 많은 플러그인 TV 게임 및 비브랜드 콘솔에 사용되었다. |- | [[Nuon (DVD 기술)|VM 랩스 누온]] || style="text-align:center;" | {{0|00}}0 || style="text-align:center;" | {{0|00}}1 || [[VM 랩스]]가 개발하고 멀티미디어에 특화된 32비트 스택 머신 프로세서이다. 이 회사의 누온 DVD 플레이어 콘솔 라인과 ZaPit 게임즈의 게임 웨이브 패밀리 엔터테인먼트 시스템에서 찾아볼 수 있다. 이 디자인은 인텔의 MMX 기술에 크게 영향을 받았으며, 벡터 및 스칼라 명령 모두를 위한 128바이트 통합 스택 캐시를 포함했다. 통합 캐시는 뱅크 이름 변경을 통해 8개의 128비트 벡터 레지스터 또는 32개의 32비트 SIMD 스칼라 레지스터로 나눌 수 있으며, 이 아키텍처에는 정수 레지스터가 없다. |- | [[Nios II]]<ref>{{웹 인용|url=https://www.altera.com/en_US/pdfs/literature/hb/nios2/n2cpu_nii5v1.pdf|title=Nios II Classic Processor Reference Guide|publisher=[[알테라]]|date=April 2, 2015}}</ref><ref>{{웹 인용|url=https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/nios2/n2cpu-nii5v1gen2.pdf|title=Nios II Gen2 Processor Reference Guide|publisher=알테라|date=April 2, 2015}}</ref> || style="text-align:center;" | {{0|0}}31 || style="text-align:center;" | {{0|00}}8 || Nios II는 MIPS IV 명령어 집합을 기반으로 하며 31개의 32비트 GPR을 가지며, 레지스터 0은 0으로 고정되어 있고, 8개의 64비트 부동소수점 레지스터가 있다. |- | [[모토로라 6800]]<ref>{{웹 인용|url=http://www.bitsavers.org/components/motorola/6800/Motorola_M6800_Programming_Reference_Manual_M68PRM(D)_Nov76.pdf |title=M6800 Programming Reference Manual |publisher=[[모토로라]] |date=November 1976|access-date=May 18, 2015|archive-url=https://web.archive.org/web/20111014000206/http://bitsavers.org/pdf/motorola/6800/Motorola_M6800_Programming_Reference_Manual_M68PRM(D)_Nov76.pdf|archive-date=2011-10-14|url-status=live}}</ref> || style="text-align:center;" | 누산기 2개, 인덱스 1개, 스택 1개 || style="text-align:center;" | {{0|00}}0 || |- | [[모토로라 68000 시리즈|모토로라 68k]]<ref>{{웹 인용|url=https://www.nxp.com/docs/en/reference-manual/M68000PRM.pdf|title=Motorola M68000 Family Programmer's Reference Manual|publisher=모토로라|year=1992|access-date=November 10, 2024}}</ref> || style="text-align:center;" | 데이터 8개 (d0-d7), 주소 8개 (a0-a7) || style="text-align:center;" | {{0|00}}8 (FP 존재 시) | 주소 레지스터 8(a7)은 스택 포인터이다. 68000, 68010, 68012, 68020, 68030은 부동소수점을 위해 FPU를 필요로 했다. 68040은 FPU가 내장되어 있었다. FP 레지스터는 80비트이다. |- | [[슈퍼H]] || style="text-align:center;" | {{0|00}}16 || style="text-align:center;" | {{0|00}}6 || 16비트 명령어 버전 (SH-5 이전) |- | [[이모션 엔진]] || style="text-align:center;" | 3(VU0)+ 32(VU1) || style="text-align:center;" | 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 명령어 세트를 기반으로 구축되었다. 이 경우 누산기는 범용이 아니라 제어 상태이다. |- | {{앵커|CUDA}}[[CUDA]]<ref>{{웹 인용|url=https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities|title=CUDA C Programming Guide|publisher=Nvidia|year=2019|access-date=Jan 9, 2020}}</ref> || style="text-align: center" colspan="2" | 구성 가능, 스레드당 최대 255개 || 이전 세대는 스레드당 최대 127/63개의 레지스터를 허용했다([[테슬라 (마이크로아키텍처)|테슬라]]/[[페르미 (마이크로아키텍처)|페르미]]). 스레드당 더 많은 레지스터가 구성될수록 동시에 실행될 수 있는 스레드 수는 줄어든다. 레지스터는 32비트 너비이므로 [[배정밀도 부동소수점]] 숫자와 64비트 포인터는 두 개의 레지스터가 필요하다. 또한 스레드당 최대 8개의 프레디케이트 레지스터가 있다.<ref>{{ArXiv 인용|title=Dissecting the NVIDIA Volta GPU Architecture via Microbenchmarking |year=2018|eprint=1804.06826|last1=Jia|first1=Zhe|last2=Maggioni|first2=Marco|last3=Staiger|first3=Benjamin|last4=Scarpazza|first4=Daniele P.|class=cs.DC}}</ref> |- | [[CDC 6000 시리즈]]<ref>{{서적 인용|url=http://bitsavers.informatik.uni-stuttgart.de/pdf/cdc/Tom_Hunter_Scans/6000_Series_Computer_Systems_RefMan_Jul65.pdf|title=Control Data 6000 Series Computer Systems, Reference Manual|publisher=Control Data Corporation|date=July 1965}}</ref> || style="text-align:center;" | {{0|0}}16 || style="text-align:center;" | {{0|00}}8 || 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 아키텍처]],<ref>{{서적 인용|url=https://bitsavers.trailing-edge.com/pdf/ibm/360/princOps/A22-6821-0_360PrincOps.pdf|title=IBM System/360 Principles of Operation|publisher=IBM|date=}}</ref> [[IBM 시스템/370]],<ref>{{서적 인용|url=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/370/princOps/GA22-7000-4_370_Principles_Of_Operation_Sep75.pdf|title=IBM System/370, Principles of Operation|publisher=IBM|date=September 1, 1975 }}</ref> [[IBM 시스템/390]], [[Z/아키텍처]]<ref>{{서적 인용|url=https://www.ibm.com/docs/en/SSQ2R2_15.0.0/com.ibm.tpf.toolkit.hlasm.doc/dz9zr006.pdf|title=z/Architecture, Principles of Operation|publisher=IBM|date=2008|edition=Seventh}}</ref> || style="text-align:center;" | {{0|0}}16 || style="text-align:center;" | 4 (FP가 있는 경우); G5 및 이후 S/390 모델 및 z/아키텍처에서는 16개 | FP는 System/360에서 선택 사항이었고, S/370 및 이후 버전에서는 항상 존재했다. 벡터 기능이 있는 프로세서에는 머신에 따라 32비트 요소 수가 다른 16개의 벡터 레지스터가 있다.<ref>{{웹 인용|url=http://bitsavers.org/pdf/ibm/370/vectorFacility/SA22-7125-3_Vector_Operations_Aug88.pdf|title=IBM Enterprise Systems Architecture/370 and System/370 - Vector Operations|publisher=IBM|id=SA22-7125-3|access-date=May 11, 2020}}</ref> 일부 레지스터는 [[호출 규약]]에 따라 고정된 용도로 할당된다. 예를 들어, 레지스터 14는 서브루틴 반환 주소에 사용되며, [[ELF 파일 형식|ELF]] ABI의 경우 레지스터 15는 스택 포인터로 사용된다. S/390 G5 프로세서는 부동소수점 레지스터 수를 16개로 늘렸다.<ref>{{웹 인용|url=https://old.hotchips.org/wp-content/uploads/hc_archives/hc10/2_Mon/HC10.S5/HC10.5.1.pdf|title=IBM S/390 G5 Microprocessor}}</ref> |- | [[MMIX]]<ref>{{웹 인용|url=http://mmix.cs.hm.edu|title=MMIX Home Page}}</ref> || style="text-align:center;" | 256 || style="text-align:center;" | 256 || 1990년대 후반 [[도널드 커누스]]가 교육 목적으로 설계한 명령어 집합이다. |- | [[NS320xx]]<ref>{{웹 인용|url=http://bitsavers.org/components/national/_dataBooks/1986_National_NS32000_Databook.pdf|title=Series 32000 Databook|publisher=[[내셔널 세미컨덕터]]|archive-url=https://web.archive.org/web/20171125004028/http://bitsavers.org/components/national/_dataBooks/1986_National_NS32000_dataBook.pdf|archive-date=2017-11-25|url-status=live}}</ref> || style="text-align:center;" | {{0|00}}8 || style="text-align:center;" | {{0|00}}8 (FP가 있는 경우) | |- | [[Xelerated X10]] || style="text-align:center;" | {{0|00}}1 || style="text-align:center;" | {{0|0}}32 || 수정된 MIPS 명령어 집합과 128비트 부동소수점 장치를 갖춘 32/40비트 스택 머신 기반 네트워크 프로세서이다. |- | [[Parallax Propeller]] || style="text-align:center;" | {{0|00}}0 || style="text-align:center;" | {{0|00}}2 || 단순한 논리 회로를 내부에 가진 8코어 8/16비트 슬라이스드 스택 머신 컨트롤러로, 각각 3개의 8/16비트 특수 제어 레지스터와 32비트 x 512 스택 RAM을 포함하는 8개의 코그 카운터(코어)를 가지고 있다. 그러나 정수용 범용 레지스터는 포함하지 않는다. 최신 프로세서 및 [[멀티 코어]] 시스템의 대부분의 섀도우 레지스터 파일과 달리, 코그의 모든 스택 RAM은 명령어 수준에서 접근할 수 있어, 필요한 경우 이 모든 코그가 단일 범용 코어처럼 작동할 수 있다. 부동소수점 장치는 외부에 있으며, 2개의 80비트 벡터 레지스터를 포함한다. |- | [[아이테니엄]]<ref>{{서적 인용|url=https://www.intel.com/content/dam/www/public/us/en/documents/manuals/itanium-architecture-vol-3-manual.pdf|title=Intel Itanium Architecture, Software Developer's Manual, Volume 3: Intel Itanium Instruction Set Reference|date=May 2010|publisher=Intel}}</ref> || style="text-align:center;" | 128 || style="text-align:center;" | 128 || 그리고 64개의 1비트 프레디케이트 레지스터와 8개의 분기 레지스터. FP 레지스터는 82비트이다. |- | [[SPARC]]<ref>{{서적 인용|url=https://www.cs.utexas.edu/~novak/sparcv9.pdf|title=The SPARC Architecture Manual, Version 9|publisher=SPARC International, Inc.|location=Santa Clara, California|editor-last1=Weaver |editor-first1=David L. |editor-last2=Germond |editor-first2=Tom }}</ref> || style="text-align:center;" | {{0|0}}31 || style="text-align:center;" | {{0|0}}32 || 글로벌 레지스터 0은 0으로 하드와이어되어 있다. [[레지스터 윈도]]를 사용한다. |- | [[IBM POWER 명령어 집합 아키텍처|IBM POWER]] || style="text-align:center;" | {{0|0}}32 || style="text-align:center;" | {{0|0}}32 || 또한 링크 레지스터, 카운트 레지스터 및 곱셈 몫(MQ) 레지스터가 포함된다. |- | [[파워PC]]/[[Power ISA]]<ref>{{서적 인용|url=https://wiki.raptorcs.com/w/images/d/d3/OPF_PowerISA_v3.1B.pdf|title=Power ISA Version 3.1B|date=September 14, 2021|publisher=OpenPOWER Foundation}}</ref> || style="text-align:center;" | {{0|0}}32 || style="text-align:center;" | {{0|0}}32 || 링크 레지스터와 카운트 레지스터도 포함된다. [[AltiVec|벡터 기능]]을 지원하는 프로세서에는 32개의 128비트 벡터 레지스터도 있다. |- | [[블랙핀]]<ref>{{서적 인용|url=https://www.analog.com/media/en/dsp-documentation/processor-manuals/Blackfin_pgr_rev2.2.pdf|title=Blackfin Processor, Programming Reference, Revision 2.2|date=February 2013|publisher=Analog Devices}}</ref> || style="text-align:center;" | 8 데이터, 2 누산기, 6 주소 || style="text-align:center;" | {{0|00}}0 || 스택 포인터와 프레임 포인터도 포함된다. 추가 레지스터는 제로 오버헤드 루프 및 순환 버퍼 DAG(데이터 주소 생성기)를 구현하는 데 사용된다. |- | [[IBM Cell#Synergistic Processing Elements (SPE)|IBM Cell SPE]] || style="text-align: center" colspan="2"| 128 || 정수, 주소 또는 부동소수점 값을 저장할 수 있는 128개의 범용 레지스터<ref>{{웹 인용|url=https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/76CA6C7304210F3987257060006F2C44/$file/SPU_ISA_v1.2_27Jan2007_pub.pdf|title=Synergistic Processor Unit Instruction Set Architecture Version 1.2|publisher=IBM|date=January 27, 2007}}</ref> |- | [[PDP-10|DEC PDP-10]] || style="text-align: center" colspan="2"| {{0|0}}16 || 모든 레지스터는 일반적으로 사용될 수 있다(정수, 부동소수점, 스택 포인터, 점프, 인덱싱 등). 모든 36비트 메모리(또는 레지스터) 워드는 하프 워드로도 조작될 수 있으며, 이는 (18비트) 주소로 간주될 수 있다. 특정 명령어에 의해 다른 워드 해석이 사용된다. 원래 PDP-10 프로세서에서는 이 16개의 GPR도 주(즉, [[자기코어 메모리|코어]]) 메모리 위치 0–15에 해당했다. "빠른 메모리"라는 하드웨어 옵션은 레지스터를 별도의 IC로 구현했으며, 메모리 위치 0–15에 대한 참조는 IC 레지스터를 참조했다. 이후 모델에서는 레지스터를 "빠른 메모리"로 구현하고 메모리 위치 0–15를 계속 참조하도록 했다. 이동 명령어는 (레지스터, 메모리) 피연산자를 취한다: {{코드|MOVE 1,2}}는 레지스터-레지스터이고, {{코드|MOVE 1,1000}}은 메모리-레지스터이다. |- | [[PDP-11|DEC PDP-11]] || style="text-align:center;" | {{0|00}}7 || style="text-align:center;" | {{0|00}}6 (FPP가 있는 경우) | R7은 프로그램 카운터이다. 모든 레지스터는 스택 포인터로 사용될 수 있지만 R6은 하드웨어 인터럽트 및 트랩에 사용된다. |- | [[VAX|DEC VAX]]<ref>{{서적 인용|url=https://bitsavers.trailing-edge.com/pdf/dec/vax/archSpec/EY-3459E-DP_VAX_Architecture_Reference_Manual_1987.pdf|title=VAX Architecture, Reference Manual|editor-first1=Timothy E.|editor-last1=Leonard|publisher=DEC books|date= 1987}}</ref> || style="text-align: center" colspan="2"| {{0|0}}16 || 범용 레지스터는 부동소수점 값에도 사용된다. 세 개의 레지스터는 특별한 용도로 사용된다: R12 (인수 포인터), R13 (프레임 포인터), R14 (스택 포인터), 반면 R15는 프로그램 카운터를 참조한다. |- | [[DEC 알파|Alpha]]<ref>{{서적 인용|url=https://download.majix.org/dec/alpha_arch_ref.pdf|title=Alpha Architecture Reference Manual|edition=Fourth|publisher=Compaq Computer Corporation|date=January 2002}}</ref> || style="text-align:center;" | {{0|0}}31 || style="text-align:center;" | {{0|0}}31 || 레지스터 R31(정수) 및 F31(부동소수점)은 0으로 하드와이어되어 있다. |- | [[MOS 6502|MOS Technology 6502]] || style="text-align:center;" | 1 누산기, 2 인덱스, 1 스택|| style="text-align:center;" | {{0|00}}0 ||A(누산기) 레지스터는 모든 ALU 연산의 대상이다. X와 Y는 각각 간접 및 직접 인덱스 레지스터이다. S(스택 포인터) 레지스터는 스택의 맨 위를 가리킨다. |- | [[65C816|W65C816S]] || style="text-align:center;" | {{0|00}}1 || style="text-align:center;" | {{0|00}}0 || 65c816은 6502의 16비트 후속작이다. X, Y, D(직접 페이지 레지스터)는 조건 레지스터이며 SP 레지스터는 특정 인덱스 전용이다. 메인 누산기는 16비트(C)로 확장되었으며<ref>{{웹 인용|url=https://wiki.superfamicom.org/learning-65816-assembly#toc-2|title=Learning 65816 Assembly|website=Super Famicom Development Wiki|access-date=14 November 2019}}</ref> 호환성을 위해 8비트(A)를 유지하며, 메인 레지스터는 이제 최대 24비트(16비트 너비 데이터 명령어/24비트 메모리 주소)를 주소 지정할 수 있다. |- | [[미디어 임베디드 프로세서|MeP]] || style="text-align:center;" | {{0|00}}4 || style="text-align:center;" | {{0|00}}8 || 미디어 임베디드 프로세서는 [[도시바]]가 개발한 32비트 프로세서로, 수정된 8080 명령어 세트를 사용했다. A, B, C, D 레지스터만 모든 모드(8/16/32비트)에서 사용할 수 있다. x86과는 호환되지 않지만, x87과 호환되는 80비트 부동소수점 장치를 포함한다. |- | [[PIC 마이크로컨트롤러]] || style="text-align:center;" | {{0|00}}1 || style="text-align:center;" | {{0|00}}0 || 기본 PIC 아키텍처에는 메모리를 인덱싱하는 메커니즘이 없다. |- | [[AVR 마이크로컨트롤러|Atmel AVR 마이크로컨트롤러]] || style="text-align:center;" | {{0|0}}32 || style="text-align:center;" | {{0|00}}0 || |- | [[ARM 아키텍처|ARM]] 32비트 (ARM/A32, Thumb-2/T32) || style="text-align:center;" | {{0|0}}14 || style="text-align:center;" | 다양 (최대 32개) | r15는 프로그램 카운터이며 범용 레지스터로 사용할 수 없다. r13은 스택 포인터이다. r8–r13은 프로세서 모드 전환 시 다른 레지스터(뱅크드)로 교체될 수 있다. 이전 버전은 26비트 주소 지정 방식을 사용했으며,<ref>{{웹 인용|url=http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf|title=Procedure Call Standard for the ARM Architecture|publisher=[[ARM 홀딩스]]|date=30 November 2013|access-date=27 May 2013}}</ref> 프로그램 카운터(r15)의 상위 비트를 상태 플래그에 사용하여 해당 레지스터를 32비트로 만들었다. |- | [[ARM 아키텍처|ARM]] 32비트 (Thumb) || style="text-align:center;" | {{0|00}}8 || style="text-align:center;" | {{0|0}}16 || Thumb 버전 1은 r0부터 r7까지의 레지스터에 대한 접근만 지원했다.<ref>{{웹 인용|url=https://developer.arm.com/docs/ddi0210/latest/programmers-model/registers/the-thumb-state-register-set|title=2.6.2. The Thumb-state register set|work=ARM7TDMI Technical Reference Manual|publisher=[[ARM 홀딩스]]}}</ref> |- | [[ARM 아키텍처|ARM]] 64비트 (A64)<ref>{{서적 인용|url=https://student.cs.uwaterloo.ca/~cs452/docs/rpi4b/ISA_A64_xml_v88A-2021-12_OPT.pdf|title=Arm A64 Instruction Set Architecture, Armv8, for Armv8-A architecture profile|publisher=Arm|date=2021}}</ref>|| style="text-align:center;" | {{0|0}}31 || style="text-align:center;" | {{0|0}}32 || 레지스터 r31은 컨텍스트에 따라 스택 포인터이거나 0으로 하드와이어된다. |- | [[MIPS 아키텍처|MIPS]]<ref>{{서적 인용|url=https://www.ece.lsu.edu/ee4720/mips64v2.pdf|title=MIPS64 Architecture For Programmers, Volume II: The MIPS64 Instruction Set|date=March 12, 2001|publisher=RISC-V Foundation|access-date=October 6, 2024}}</ref> || style="text-align:center;" | {{0|0}}31 || style="text-align:center;" | {{0|0}}32 || 정수 레지스터 0은 0으로 하드와이어되어 있다. |- | [[RISC-V]]<ref>{{서적 인용|url=https://riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf|title=The RISC-V, Instruction Set Manual, Volume I: User-Level ISA, Document Version 2.2|publisher=RISC-V Foundation|date=May 2017|editor-last1=Waterman|editor-first1=Andrew|editor-last2=Asanovi|editor-first2=Krste }}</ref> || style="text-align:center;" | {{0|0}}31 || style="text-align:center;" | {{0|0}}32 || 정수 레지스터 0은 0으로 하드와이어되어 있다. 매우 제한된 자원을 가진 시스템을 위한 RV32E 변형은 15개의 정수 레지스터를 가지고 있다. |- | [[Adapteva|Epiphany]] || style="text-align: center" colspan="2" | 64 (코어당)<ref>{{웹 인용|url=http://adapteva.com/docs/epiphany_arch_ref.pdf|title=Epiphany Architecture Reference}}</ref> || 각 명령어는 레지스터를 정수로 해석할지 단정밀도 부동소수점으로 해석할지 제어한다. 아키텍처는 4096 코어까지 확장 가능하며, 현재 16 및 64 코어 구현이 가능하다. |} {{-}} ==용법== 프로세서에서 사용할 수 있는 레지스터 수와 이 레지스터를 사용하여 수행할 수 있는 연산은 [[최적화 컴파일러]]가 생성하는 코드의 [[알고리즘 효율성|효율성]]에 상당한 영향을 미친다. 표현식 트리의 [[스트라흘러 수]]는 해당 표현식 트리를 평가하는 데 필요한 최소 레지스터 수를 나타낸다. == 같이 보기 == * [[CPU 캐시]] * [[양자 레지스터]] * [[레지스터 할당]] * [[레지스터 파일]] * [[시프트 레지스터]] == 각주 == {{각주}} {{프로세서 기술}} {{X86 어셈블리 주제}} {{전거 통제}} {{위키데이터 속성 추적}} [[분류:컴퓨터 구조]] [[분류:디지털 레지스터]] [[분류:중앙 처리 장치]]
프로세서 레지스터
문서로 돌아갑니다.
검색
검색
프로세서 레지스터 문서 원본 보기
새 주제