2 분 소요


이전 포스팅 컴퓨터의 기본 구조에서 CPU가 어떻게 구성되어있는지 먼저 보고오자!


▶ 명령어의 형식

CPU는 명령어를 받아 처리한다. 그렇다면, 명령어는 어느 형식으로 이루어져 있을까?


▷ 구성

  • 명령어는 오퍼레이션(연산 코드)과 오퍼랜드(피연산자)로 구성되어 있다.


  • 오퍼레이션(Operation code)
    • 연산자를 담당
    • 동사에 해당(더해라, 곱해라, 나눠라, 저장해라)
  • 오퍼랜드(operand)
    • 피연산자를 담당
    • 목적어에 해당 (더해라 무엇을)
    • ‘연산에 사용할 데이터’(숫자나 문자) 또는 ‘연산에 사용할 데이터가 저장된 위치’(메모리 주소나 레지스터 이름) 이다.
    • 오퍼랜드 필드는 ‘연산에 사용할 데이터가 저장된 위치’ 가 훨씬 많이 쓰이므로 주소 필드라고 하기도 한다.
    • 오퍼랜드는 명령어 안에 하나도 없을 수도 있고, 한 개만 있을 수도 있고, 한 개 이상일 수도 있다.


▷ 주소에 따른 명령어 방식

  • 명령어 형식은 오퍼랜드 수에 따라 3, 2, 1, 0 주소 방식으로 구분한다.
  • 오퍼랜드가 하나도 없는 명령어를 0-주소 명령어,  오퍼랜드가 하나인 명령어를 1-주소 명령어, 두 개인 명령어를 2-주소 명령어, 세 개인 명령어를 3-주소 명령어라고 부른다.


① 0-주소 명령어

  • 정의
    • 연산코드부(오퍼레이션)만 존재하고 주소를 지정하는 오퍼랜드가 존재하지 않는 명령어
  • 특징
    • 스택과 관련된 자료를 처리할 때 사용하며, Stack 메모리의 TOP(Stack 포인터)이 가리키는 Operand를 이용하여 명령을 수행한다.
    • 스택을 사용하여 모든 연산을 수행하기 때문에 수행 후에는 원래의 자료가 모두 지워진다!
    • 피연산자들을 먼저 PUSH 해주고, 연산자를 만나면 피연산자를 POP한 후에 연산 결과를 PUSH한다.
    • Postfix 방식으로 수식을 표현한다.
    • 다른 주소 명령어들과 달리 STOR 명령어를 사용하지 않는다. (PUSH/POP 사용)


② 1-주소 명령어

  • 정의
    • 1개의 오퍼랜드로 구성된 명령어
  • 특징
    • 누산기(AC)를 이용하여 처리하며 연산 결과도 AC에 저장한다.
    • 1주소 명령어는 피연산자 하나로 연산을 수행하는 것이 가능하다!
      • AC를 1개만 갖고 있는 컴퓨터에서는 데이터가 AC에 있음을 나타낼 필요가 없고, 연산 결과를 항상 AC에 기억하도록 하면 연산의 주소를 지정할 필요가 없어 하나의 입력 자료의 주소를 생략할 수 있는 것이다.
    • 따라서 1-주소 명령어를 쓰는 시스템에서 연산의 중심이 되는 레지스터가 되는 것이다!
  • 예시
    • 메모리 X번지의 내용과 AC의 내용을 더하고, 그 결과를 다시 AC에 저장해라
    • X번지의 데이터를 누산기에 저장해라


③ 2-주소 명령어

  • 정의
    • 2개의 오퍼랜드로 구성된 명령어
  • 특징
    • 가장 일반적인 명령어 방식
    • 연산코드, R1, R2가 될 수도 있고, 연산코드 R1, X(기억장치 주소)가 될 수도 있다.
  • 장점
    • 실행 속도가 빠르고 기억 장소 효율이 좋다.
    • 수행 결과를 기억장치에 저장하고 중앙처리장치에도 남아 있어서 결과를 테스트할 때 시간을 절약할 수 있다.
  • 단점
    • 전체 프로그램 길이가 길어진다.
    • 연산 결과를 한쪽에 저장해야 해서 input 받은 값 중에 한쪽의 자료가 사라진다.
  • 예시
    • R1과 R2를 더하고 그 값을 R1에 저장해라
    • R2에 있는 값을 R1으로 이동시켜라
    • 메모리 X번지에 있는 값을 가져와 R1이랑 더한다음 그 값을 R1에 저장해라
    • Y번지의 기억장치 데이터를 X번지의 기억장치로 이동시켜라 (X, Y는 주소를 나타냄)


④ 3-주소 명령어

  • 정의
    • 3개의 오퍼랜드로 구성된 명령어
  • 장점
    • 수식 계산의 연산 후에도 입력 자료가 사라지지 않는다.
      • 두 개의 피 연산자의 연산을 수행하고, 연산 결과 값을 나머지 한 개의 오퍼랜드에 저장할 수 있기 때문
    • 프로그램 길이를 짧게 할 수 있다.
    • 명령 인출을 위하여 주기억장치를 접근하는 횟수가 줄어든다.
    • 한 개의 명령어로 여러 명령을 수행하므로 전체 명령어를 읽어오는 시간은 단축된다.
  • 단점
    • 명령어 한 개의 길이가 너무 길어진다.
    • 하나의 명령을 수행하기 위해서 최소한 4번 기억장소에 접근해야 하므로 수행시간이 길어진다.
  • 예시
    • Y와 Z번지의 데이터를 더하여 X번지에 저장해라 (X,Y,Z는 각각 주소를 나타냄)


▷ 학습 활동

4가지 주소 형식으로 다음과 같은 연산 프로그램을 구현해 보자 (´◡`)

  • 명령어 리스트


  • 학습 활동1
    • 수식을 준 다음 1-주소 명령어로 써봐라, 2-주소 명령어로 써봐라, 3-주소 명령어로 써봐라 하는 문제 나올 가능성 존재
    • 주소 형식 간의 세부적인 것을 주고 뜻을 써 보라는 문제 나올 가능성 존재
    • 어떤 명령을 수행하는 건지 써 보라는 문제 나올 가능성 존재
  • 학습활동 2 ( 출처 : https://jeongminhee99.tistory.com/56 )




📎참조

  • 『 성결대학교 김자원 교수님 』 - 컴퓨터 구조 (2023)
  • 『 컴퓨터구조(제5판) 』 - 복두 출판사
  • 『 혼자공부하는 컴퓨터 구조 - 운영체제 』 - 강민철
  • https://rebugs.tistory.com/189
  • https://kimkyunghwan-jinjinghuan.tistory.com/155
  • https://hyk0425.tistory.com/8
  • https://jeongminhee99.tistory.com/56
  • https://blog.naver.com/davidoff73/30027805588

댓글남기기