프로그램
카운터,
명령어레지스터
,메모리 주소/버피 레지스터
,범용/플래그 레지스터
,스택 포인터
,베이스 레지스터
레지스터의 종류와 역할을 학습하고, 각 레지스터를 통해 명령어가 처리되는 과정을 이해합니다.
많은 CPU가 공통으로 포함하고 있는 여덟 개의 레지스터를 알아보자.
프로그램 카운터(PC, Progrma Counter
)는 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장한다. 프로그램 카운터를 명령어 포인터(IP, Instruction Pointer)
라고 부르기도 한다.
명령어 레지스터(IR, Instruction Register)
는 해석할 명령어, 즉 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터이다. 제어장치는 명령어 레지스터 속 명령어를 받아들이고 이를 해석한 뒤 제어 신호를 내보낸다.
메모리 주소 레지스터(MAR, Memory Address Register)
는 메모리의 주소를 저장하는 레지스터이다. CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거치게 된다.
메모리 버퍼 레지스터(MBR, Memory Buffer Register)
는 메모리와 주고받을 값을 저장하는 레지스터이다. 즉, 메모리에 쓰고 싶은 값이나 메모리로부터 전달받은 값은 메모리 버퍼 레지스터를 거친다. CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고 받을 값은 메모리 버퍼 레지스터를 거친다. 메모리 버퍼 레지스터는 메모리 데이터 레지스터(MDR, Memory Data Register)
라고도 부른다.
범용 레지스터(general purpose register)
는 자유롭게 사용할 수 있는 레지스터로, 데이터와 주소를 모두 저장할 수 있다. 일반적으로 CPU 안에는 여러 개의 범용 레지스터들이 있다.
플래그 레지스터(flag register)
는 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터이다.
스택 포인터(stack pointer)
에 대한 설명은 아래 '특정 레지스터를 이용한 주소 지정 방식(1): 스택 주소 지정 방식'에서 참고하자.
베이스 레지스터(base register)
에 대한 설명은 아래 '특정 레지스터를 이용한 주소 지정 방식(2): 변위 주소 지정 방식'에서 참고하자.
메모리에 저장된 프로그램을 실행하는 과정에서 프로그램 카운터, 명령어 레지스터, 메모리 주소 레지스터, 메모리 버퍼 레지스터에 어떤 값들이 담기는지 알아보자.
책에 있는 그림을 참고하면 이해가 쉬울 것이다!
이 과정이 반복되면서 CPU가 메모리 속 프로그램을 순차적으로 읽어 들이고 실행해 나갈 수 있는 것이다. CPU 속 프로그램 카운터가 꾸준히 증가하기 때문이다. 단, JUMP
, CALL
명령어나 인터럽트가 발생하면 순차적인 실행 흐름이 끊길 수 있다.