부록: MIPS CPU 레지스터 종류와 개수 총정리
MIPS 아키텍처 CPU가 가지고 있는 레지스터의 개수는 목적에 따라 여러 종류로 나눌 수 있으며, 각 종류별로 개수가 다릅니다.
주요 레지스터들을 정리하면 다음과 같습니다:
범용 레지스터 (General Purpose Registers, GPRs):
개수: 32개
특징:
대부분의 MIPS 명령어에서 피연산자로 사용되는 레지스터입니다.
각 레지스터는 32비트(MIPS32 기준) 또는 64비트(MIPS64 기준) 크기입니다.
$0
또는$zero
라고 불리는 레지스터는 항상 0 값을 가지며 쓰기가 불가능합니다.$ra
(Return Address)와 같이 특정 용도로 사용되는 레지스터들이 있지만, 기본적으로는 범용으로 사용될 수 있습니다.프로그래머가 직접 접근하고 사용할 수 있습니다.
부동 소수점 레지스터 (Floating-Point Registers, FPRs):
개수: 32개
특징:
부동 소수점 연산을 위해 사용되는 레지스터입니다.
MIPS32 아키텍처에서도 32개의 32비트 또는 64비트 부동 소수점 레지스터를 가질 수 있습니다. (MIPS64에서는 주로 64비트)
일반적으로
$f0
부터$f31
로 명명됩니다.
프로그램 카운터 (Program Counter, PC):
개수: 1개
특징: 다음에 실행될 명령어의 메모리 주소를 저장하는 32비트(MIPS32) 또는 64비트(MIPS64) 레지스터입니다. 프로그래머가 직접 접근할 수는 없지만,
jal
(Jump And Link) 같은 명령어로 간접적으로 영향을 줄 수 있습니다.
HI/LO 레지스터:
개수: 2개 (HI, LO)
특징: 정수 곱셈 또는 나눗셈 연산의 결과를 저장하는 데 사용됩니다.
HI
: 곱셈 결과의 상위 비트 또는 나눗셈의 나머지.LO
: 곱셈 결과의 하위 비트 또는 나눗셈의 몫.이 레지스터들의 값은
mfhi
(Move From HI),mflo
(Move From LO) 같은 특수 명령어를 통해 범용 레지스터로 옮겨올 수 있습니다. (참고: MIPS Release 6부터는 일부 변경 사항이 있을 수 있습니다.)
Co프로세서 0 (CP0) 레지스터 (제어 레지스터):
개수: 여러 개 (아키텍처 버전에 따라 다름)
특징: CPU의 동작을 제어하거나 상태 정보를 나타내는 특수 목적 레지스터입니다. 예외 처리, 메모리 관리 유닛(MMU), 타이머 등을 제어하는 데 사용됩니다.
파이프라인 레지스터 (Pipeline Registers):
개수: 4개 (일반적인 5단계 파이프라인 기준: IF/ID, ID/EX, EX/MEM, MEM/WB)
특징: 이전 답변에서 설명했듯이, CPU 내부의 파이프라인 단계들 사이에서 데이터를 전달하고 동기화하는 데 사용되는 하드웨어 구현의 일부입니다. 프로그래머에게 직접 노출되지 않습니다.
종합하면, 프로그래머가 직접 사용하고 어셈블리어 명령어로 접근할 수 있는 주요 레지스터는 32개의 범용 레지스터와 32개의 부동 소수점 레지스터, 그리고 간접적으로 접근 가능한 PC, HI, LO 레지스터 등이 있습니다. 여기에 CPU의 내부 동작을 위한 제어 레지스터(CP0)와 파이프라인 레지스터(IF/ID, ID/EX 등)까지 포함하면, MIPS CPU가 가지고 있는 전체 레지스터의 개수는 훨씬 더 많아집니다.