명령어와 주소체계

몽이·2022년 7월 1일
0

운영체제

목록 보기
1/9

1. 명령어(Instruction)

1) 명령어의 개념

(1) 컴퓨터로 명령 전달 방법

  • 컴퓨터는 흔히 bit(0과 1)로 표현되는 디지털 신호를 통해 명령을 전달받는다.
  • bit가 아닌 문자로 구성된 명령어들은 별도의 번역기를 통해 bit 형태로 변환되어 전달된다.

(2) 명령어 실행 및 데이터 처리 과정

  • 전달받은 bit 데이터를 순차적으로 실행하는 과정에서 처리 및 저장 작업 등을 수행하게 된다.
  • 데이터 처리는 CPU에서 수행하고, 저장은 MEMORY에서 수행하며, 입출력은 각각의 입출력 장치에서 수행한다.

2) 명령어의 수행

(1) 기계 사이클 : 메모리에 기억되어 있는 명령어를 가져와 CPU에서 처리되는 일련의 순환 주기이다.

(2) Fetch Instruction : 명령어를 주기억 장치에서 레지스터로 가져온다. (명령어 : 주기억 장치 → 레지스터)

(3) Decode Instruction : 명령어를 분석하여 작업 수행에 필요한 장치에 제어 신호를 보낸다.

(4) Operand Fetch : 주기억 장치에서 피연산자를 레지스터로 가져온다. (피연산자 : 주기억 장치 → 레지스터)

(5) Execute Cycle : 명령어에 해당하는 연산을 실행하고 결과를 레지스터에 저장한다.

(6) Interrupt Search

  • *인터럽트가 추가된 기계 사이클은 명령어 실행 단계 다음에 인터럽트 처리여부를 확인한다.
  • 현재 수행중인 명령어는 끝까지 처리된 후에 인터럽트 여부를 조사한다.

2. 레지스터(Register)

1) 레지스터의 개념

  • CPU 내에서 발생 및 사용되는 데이터를 일시적으로 저장하는 저장장치이다.
  • 가격대비 용량이 가장 적고 기억장치 중 속도가 가장 빠르다.
  • 플립플롭(Flip-Flop)과 래치(Latch)로 구성된다.

2) 레지스터의 종류

(1) 제어장치(CU : Control Unit)의 레지스터 : 산술 및 논리 연산 등의 연산기능을 수행할 때 사용되는 레지스터

  • 메모리 주소 레지스터(MAR) : 주기억장치 내에 출입하는 데이터의 번지를 기억
  • 메모리 버퍼 레지스터(MBR) : 주기억장치 내에 출입하는 데이터가 잠시 저장
  • 프로그램 카운터(PC : Program Counter) : 다음에 실행할 명령어들의 번지를 보관
  • 명령 레지스터(IR : Instruction Register) : 현재 실행 중인 명령어를 임시 보관
  • 번지 레지스터(Address Register) : 주기억장치의 번지를 기억

(2) 연산장치(ALU : Arithmetic Logic Unit)의 레지스터 : 명령어 수행에 필요한 데이터를 저장하는 레지스터

  • 누산기(Accumulator) : 연산의 결과를 일시적으로 보관
  • 데이터 레지스터 : 연산에 사용될 데이터를 기억
  • 상태 레지스터 : 연산 중 발생되는 이벤트 상태를 기억
  • 인덱스 레지스터 : 주소 변경을 위해 사용되는 레지스터

3. 시스템 버스(Bus)

1) 버스의 개념

  • 주변 장치 간에 정보 교환을 위해 연결된 통신 회선으로 CPU 내부 요소 사이의 정보를 전송하는 내부 버스와 CPU 와 주변장치 사이의 정보를 전송하는 외부 버스가 있다.
  • 외부 버스는 주소 버스, 데이터 버스, 제어 버스 등이 있다.

2) 외부 버스의 종류

(1) 주소 버스

  • 하나의 장치로부터 다른 장치로 주소 데이터를 전달하는 단방향 회선이다.
  • 주소 버스 회선 수는 메모리 용량을 2의 제곱으로 나타냈을 때 지수 기준으로 계산된다.
    • 256bit = 2^8bit : 256 비트 메모리인 경우 8비트의 회선이 필요

(2) 데이터 버스

  • 장치 간 서로 데이터를 교환하기 위한 양방향 회선이다.
  • 데이터 버스 회선 수는 데이터의 크기와 같다.

(3) 제어 버스 : CPU가 주변 장치에게 제어 신호를 전달하는 단방향 회선이다.

4. 명령어 형식

1) 명령어 형식의 이해

  • 명령어 형식은 연산코드(연산자, Op-Code : Operation Code)와 연산을 수행하는 대상인 오퍼랜드(피연산자, Operand)로 구성된다.

  • 명령어 형식에 따라 정보의 양이 달라지기 때문에 용도에 따라 적절하게 구성하여야 한다.

  • 연산자에는 전달(Transfer), 함수 연산(Function), 제어(Control), 입출력(Input, Output) 기능이 있다.

  • 연산 코드의 비트수에 따라서 명령어 개수가 결정된다.

    - Op-code가 3비트인 경우, 명령어의 개수는 2^3 = 8개이다.

2) 0-주소 명령어

  • Op-Code만 있고 Operand는 없는 명령어 형식으로, 주로 STACK 구조에서 사용된다.
  • 스택에 자료를 입력하는 push와 스택에서 자료를 출력하는 pop 명령을 사용한다.

3) 1-주소 명령어

  • Operand가 1개 있는 명령어 형식으로, 주로 누산기를 사용한다.

4) 2-주소 명령어

  • Operand가 2개 있는 명령어 형식으로, 두 Operand를 연산한 결과를 마지막 Operand에 덮어씌운다.
  • 연산 결과에 의해 마지막 Operand의 원래 값은 잃어버리게 된다.

5) 3-주소 명령어

  • Operand가 3개 있는 명령어 형식으로, 앞의 두 Operand를 연산한 결과를 마지막 Operand에 할당한다.
  • 모든 Operand값이 유지된다.

5. 주소 지정 방식

1) 주소 지정 방식의 이해

  • 연산에 필요한 데이터의 실제 위치(Address)에 접근하는 방식을 의미한다.
  • 즉시 주소 지정, 직접 주소 지정, 간접 주소 지정, 계산에 의한 주소 지정 방식 등이 있다.
  • 메모리 참조 횟수가 적을수록 접근 속도가 빠르다.

2) 즉시(Immediate) 주소 지정 방식

  • Operand에 데이터 주소가 아닌 실제 데이터가 존재하는 방식이다.
  • 기억 장치에 접근하지 않기 때문에 메모리 참조 횟수가 0이다.
  • 주소 대신 실제 데이터를 넣어야 하므로 데이터 크기에 따라 문제가 발생할 수 있다.

3) 직접(Direct) 주소 지정 방식

  • Operand에 실제 데이터의 위치 값을 저장하는 방식이다.
  • 메모리 참조 횟수가 1이다.
  • 간단하지만 메모리 확장 및 변경에 어려움이 있다.

4) 간접 주소 지정 방식

  • Operand에 실제 데이터의 위치 값이 저장되어 있는 위치 값을 저장하는 방식이다.
  • 메모리 참조 횟수가 2이다.
  • 주소 필드의 길이에 상관없이 언제든 원하는 위치 참조가 가능하다.

5) 계산에 의한 주소 지정 방식

  • Operand에 저장된 값을 계산하여 실제 데이터가 있는 위치를 참조하는 방식이다.
  • 인덱스 레지스터, 프로그램 카운터, 베이스 레지스터 등이 사용된다.
profile
풀스택 개발자가 되는 날까지 달리자!

0개의 댓글