본문 바로가기
CS/Computer Architecture

[컴퓨터구조] 명령어(Instruction)

by 테리는당근을좋아해 2020. 7. 13.

명령어 사이클

- CPU는 명령어 사이클을 반복해 프로그램을 실행

- Fetch와 Execution 단계로 이루어져 있음

 

1) 인출 단계(Fetch stage)

- 메모리에 저장된 명령어를 읽어들임

- 현재 실행할 명령어를 읽어 명령어 레지스터(IR, Instruction Register)에 저장

- 다음에 실행할 명령어를 읽어 프로그램 카운터(PC, Program Counter)에 저장

 

2) 실행 단계(Execution stage)

- 명령어 레지스터에 저장된 명령어를 실행

- 제어장치는 명령어를 해독하고 제어신호를 생성해 각 구성요소에 전달

- 제어신호에 따라 ALU는 해당하는 연산을 수행

- 각 신호와 데이터는 내부버스를 통해 전달

- 연산에 필요한 데이터와 명령어는 레지스터에 저장

 

명령어의 종류

1) 데이터 전달(Data transfer)

- 컴퓨터 구성요소 간 데이터 전달 

- Opcode, Source Operand, Destination Operand로 구성

- Opcode : Load, Store, Move, Input, Output 등

 

2) 데이터 처리(Data Processing)

- 레지스터 또는 메모리에 저장되어있는 데이터에 대한 산술/논리 연산

- Opcode, Source Operand, Destination Operand로 구성

- 명령어의 종류에 따라 Source Operand가 2개 일 수 도 있음

- Opcode : Add, Multi, AND, OR, Not 등

 

3) 프로그램 제어(Program Flow Control)

- 명령어의 실행 순서 제어

- 프로그램 카운터의 값 변경

- Opcode, Branch Target Address로 구성

- 분기의 종류에 따라 Unconditional Branch, Conditional Branch, Subroutine, Return이 있음

 

(1) 무조건 분기(Unconditional Branch)

- 조건에 상관없이 프로그램 카운터 값을 분기 목적 주소로 변경하고 해당 명령어를 실행

 

(2) 조건 분기(Conditional Branch)

- 조건에 따라 프로그램 카운터 값을 분기 목적 주소로 변경하고 해당 명령어를 실행

- 조건에 만족하지 않을 경우 기존에 있던 프로그램 카운터가 가르치는 다음 명령어 실행

 

(3) 서브루틴/함수호출(Subroutine/Function Call)

- 서브루틴 호출 시, Return 레지스터에 현재 주소를 저장하고 서브루틴 시작 주소를 프로그램 카운터에 저장

 

(4) 리턴(Return)

- 서브루틴의 실행이 완료되었을 때, Return 레지스터에 저장된 되돌갈 주소값으로 프로그램카운터 값을 변경하고 다음 명령어를 실행

- Opcode로만 구성

 

명령어의 구성요소

1) 동작코드(Opcode, Operation Code)

- CPU가 수행할 동작

- Add, Multi, Load 등

 

2) 피연산자(Operand)

- CPU가 명령어를 수행할 대상

- Operand의 대상은 레지스터, 메인 메모리, I/O Unit이 될 수 있음

- Source operand와 Destination operand가 있음

- Source Operand는 동작코드가 처리할 대상

- Destination Operand는 처리 결과를 저장할 장소

 

3) 분기 목적지 주소(Branch Target Address)

- 분기 명령을 수행할 때, 다음 처리할 명령어의 주소

 

댓글