1. 반드시 알아야 할 레지스터

상용화된 CPU 속 레지스터들은 CPU마다 이름, 크기, 종류가 매우 다양하다. 이들은 각 CPU 제조사 홈페이지나 공식 문서 등에서 확인할 수 있다. 모든 레지스터를 설명할 수 없기에 많은 CPU가 공통으로 포함하고 있는 핵심 레지스터를 정리한다.

반드시 알아야 할 여덟 개의 레지스터는 아래와 같다. 이 레지스터들은 저마다의 역할이 있고, 그에 걸맞는 내용을 저장한다.

① 프로그램 카운터 ② 명령어 레지스터 ③ 메모리 주소 레지스터 ④ 메모리 버퍼 레지스터 ⑤ 플래그 레지스터 ⑥ 범용 레지스터 ⑦ 스택 포인터 ⑧ 베이스 레지스터

우선 첫 번째 프로그램 카운터부터 네 번째 메모리 버퍼 레지스터까지, 네 개의 레지스터를 알아보도록 하자.

1) 프로그램 카운터

프로그램 카운터(PC: Program Counter)는 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어들인 명령어의 주소를 저장한다. 프로그램 카운터를 명령어 포인터(IP: Instruction Pointer)라고 부르는 CPU도 있다.

2) 명령어 레지스터

명령어 레지스터(IR: Instruction Register)는 해석할 명령어, 즉 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터이다. 제어장치는 명령어 레지스터 속 명령어를 받아들이고 이를 해석한 뒤 제어 신호를 내보낸다.

3) 메모리 주소 레지스터

메모리 주소 레지스터(MAR: Memory Address Register)는 메모리의 주소를 저장하는 레지스터이다. CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거치게 된다.

4) 메모리 버퍼 레지스터

메모리 버퍼 레지스터(MBR: Memory Buffer Register)는 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터이다. 즉, 메모리에 쓰고 싶은 값이나 메모리로부터 전달받은 값은 메모리 버퍼 레지스터를 거치게 된다. CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고받을 값은 메모리 버퍼 레지스터를 거친다. 참고로 메모리 버퍼 레지스터는 메모리 데이터 레지스터(MDR: Memory Data Register)라고도 부른다.