CS/컴퓨터 구조

🖥️컴퓨터 구조 - CPU의 ALU

개발하는김오리 2025. 3. 6. 20:18

컴퓨터 구조의 4가지 핵심 부붐 중 CPU는 ALU, 제어장치, 레지스터라는 구성 요소를 가지고 있다. 그 중 ALU가 어떤 일을 하는 지 정리해보려고 한다.

 

ALU (Arithmetic Logic Unit, 산술 논리 연산 장치)

ALU는 CPU의 가장 중요한 구성 요소로, 산술 연산(덧셈,뺄셈 등)과 논리 연산(AND,OR,NOT 등)을 수행한다. ALU는 아래 그림처럼 정보를 받아들이고 내보낸다.

https://institute.careerguide.com/alu-full-form-introductioncomponentsaarchitectureoperations/

OP Code(연산 코드)

OP CodeALU가 수행해야 할 연산을 지정하는 코드이다. CPU의 제어장치가 명령어를 해석해서 OP Code를 확인하고, 이를 기반으로 ALU를 포함한 내부 CPU 내부 부품들에게 적절한 신호를 보낸다.

 

Integer Operand(정수 피연산자)

ALU가 연산을 수행할 때 입력으로 받는 입력값을 의미한다. Integer Operand는 레지스터, 메모리에서 불러올 수도 있고 일부 명령어는 연산을 할 때 즉시 값(상수값)에서 가져와 사용하기도 한다. 

 

Result(결괏값)

ALU는 OP Code와 Integer Operand를 입력으로 받아 연산을 수행하고, 그 결과를 출력(Result)으로 내보낸다.
결과는 보통 다음 중 하나로 전달된다.

 

1. 레지스터(Register)로 저장

  • 대부분의 연산 결과는 CPU의 레지스터에 저장된다.
  • 예: ADD R1, R2 (R1 ← R1 + R2)
    • 덧셈 결과가 R1에 저장됨

2. 메모리(Memory)에 저장

  • 연산 결과가 필요하면 메모리에 직접 저장할 수도 있다.
  • 예: STORE R1, [1000H] (R1의 값을 메모리 1000H에 저장)

3. 버스로 전송 (I/O 장치로 출력)

  • ALU 연산 결과가 CPU 외부로 나갈 수도 있다.
  • 예: 출력 장치(디스플레이, 네트워크 등)로 전송

4. 제어 장치가 상태 플래그(Status Flags)로 활용

  • 연산 결과가 0인지, 음수인지, 오버플로우가 발생했는지 등을 CPU의 상태 플래그(Status Register) 에 저장해서 이후 연산이나 분기 명령에 활용할 수도 있다.
  • 예: CMP R1, R2 (R1 - R2 수행 후, 결과는 버리고 플래그만 업데이트)

Status(상태 플래그)

 

ALU가 연산을 수행한 후 결과에 대한 특정한 상태 정보를 나타내는 플래그(flag) 값이다. 예를 들어 연산 결과가 음수일 때 음수라는 추가 정보를 내보내고, 혹은 연산 결과가 연산 결과를 담을 레지스터보다 클 때 결괏값이 크다는 '오버플로우' 정보를 내보낸다. 보통 CPU의 상태 레지스터(Status Register, FLAGS Register) 에 저장된다. 

 

주요 상태 플래그 예시

 

플래그 종류 의미 사용 예시
부호 플래그 연산한 결과의 부호를 나타낸다. 부호 플래그가 1일 경우 계산 결과는 음수, 0일 경우 계산 결과는 양수를 의미한다.
제로 플래그 연산 결과가 0인지 여부를 나타낸다. 제로 플래그가 1일 경우 연산 결과는 0, 0일 경우 연산결과는 0이 아님을 의미한다.
캐리 플래그 연산 결과 캐리(자리올림)가 발생했는 지를 나타낸다. 덧셈·뺄셈에서 자리올림(언더플로우·오버플로우) 발생 시 1, 그렇지 않으면 0이다.
오버플로우 플래그 오버플로우 발생 여부를 나타낸다. 부호 있는 연산에서 오버플로우가 발생하면 1, 그렇지 않으면 0이다.
인터럽트 플래그 인터럽트가 가능한지를 나타낸다. 인터럽트 플래그가 1일 경우 인터럽트가 가능함을 의미하고, 0일 경우 불가능함을 의미한다.
슈퍼바이저 플래그 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타낸다. 1일 경우 커널 모드로 실행 중임을 의미하고, 0일 경우 사용자 모드로 실행 중임을 의미한다.

 

이러한 플래그는 CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 일종의 참고 정보이다. 그리고 플래그들은 플래그 레지스터(상태 레지스터)라는 레지스터에 저장된다 .