ALU는 레지스터로부터 피연산자를, 제어장치로부터 제어 신호를 받아 연산을 수행한다.
받아들인 정보를 바탕으로, 레지스터에 결괏값 또는 플래그를 내보낸다.
플래그는 연산 결과에 대한 추가적인 상태 정보를 담고 있다.
제어장치가 받아들이는 정보
제어장치가 제어 신호를 내보내는 목적지
레지스터는 CPU 내부의 작은 임시저장장치로, 프로그램 속 명령어를 저장하거나 연산에 사용되는 데이터를 저장한다.
CPU 마다 레지스터의 종류가 다르다.
공통적인 레지스터는 8개이다.
스택 주소 지정 방식은 스택 포인터(SP) 레지스터를 이용하여 스택의 주소를 지정하는 방식이다.
오퍼랜드 필드 값(변위)을 이용하여 유효 주소를 계산하는 방식이다.
플래그 레지스터
: 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
프로그램 카운터
: 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
범용 레지스터
: 데이터와 주소를 모두 저장할 수 있는 레지스터
명령어 레지스터
: 해석할 명령어를 저장하는 레지스터
하나의 명령어를 처리하는 과정을 명령어 사이클이라고 한다.
인출 사이클(Fetch Cycle): 명령어를 메모리에서 가져오는 과정
실행 사이클(Execute Cycle): 명령어를 실행하는 과정
간접 사이클(Indirect Cycle): 간접 주소 지정 방식을 사용하는 명령어를 처리하는 과정
인터럽트는 CPU의 작업을 방해하는 신호를 말한다.
동기 인터럽트(Synchronous Interrupt): CPU에 의해 발생하는 인터럽트. 예외라고도 한다. 폴트, 트랩, 중단, 소프트웨어 인터럽트 등이 있다.
비동기 인터럽트(Asynchronous Interrupt): 외부 장치에 의해 발생하는 인터럽트. 하드웨어 인터럽트라고도 한다.
하드웨어 인터럽트: 알림과 같은 역할을 하는 인터럽트. 예를 들어, 타이머 인터럽트, 키보드 인터럽트 등이 있다.
하드웨어 인터럽트의 처리 순서
인터럽트 요청 신호: 인터럽트 요청을 CPU에 알리는 신호. 플래그 레지스터의 인터럽트 플래그를 통해 인터럽트 요청을 확인한다.
하드웨어 인터럽트에는 인터럽트 플래그로 막을 수 있는 인터럽트(maskable interrupt)와 막을 수 없는 인터럽트(non-maskable interrupt)가 있다.
인터럽트 서비스 루틴: 인터럽트가 발생했을 때 실행되는 루틴으로 메모리에 저장된다. 인터럽트 벡터를 참조하여 실행된다.
인터럽트 벡터: 인터럽트 서비스 루틴의 주소를 저장한 테이블. 각각의 인터럽트를 구분하기 위한 정보를 가지고 있다.
인터럽트 벡터 테이블: 인터럽트 벡터를 모아놓은 테이블. 인터럽트 벡터 테이블은 메모리에 저장된다.