Post

[컴퓨터구조] 컴퓨터 명령어

컴퓨터 명령어

  • 컴퓨터 명령어는 컴퓨터가 수행해야 하는 일을 나타내기 위한 비트들의 집합으로 일정한 형식을 가진다.
  • 명령어의 세트를 명령어 집합이라고 한다.
  • 동일 계열의 컴퓨터는 같은 명령어 집합을 사용한다.
  • 명령어와 명령어 수행에 필요한 데이터는 주기억장치에 저장되어 있고, 이것을 중앙처리장치가 하나씩 순차적으로 수행한다.
  • 컴퓨터의 제어장치는 기억장치에 저장된 명령어와 데이터를 읽어서 2진 코드를 해석한 후, 명령어 수행을 위한 제어신호를 제공한다.

명령어의 구성

  • 필드라는 비트그룹으로 이루어지며, 연산코드와 오퍼랜드 필드로 구성된다.
    • 연산코드 필드: 처리해야 할 연산의 종류
    • 오퍼랜드 필드: 처리할 대상 데이터 또는 데이터의 주소

명령어의 기능

  • 함수연산 기능: 덧셈, 시프트, 보수 등 산술연산과 AND, OR, NOT 등의 논리연산 수행 기능
  • 정보전달 기능: 레지스터들 사이의 정보전달 기능과 중앙처리장치와 주기억장치 사이의 정보전달 기능
  • 순서제어 기능: 조건 분기와 무조건 분기 등을 통해 명령어의 수행 순서를 제어하는 기능
  • 입출력 기능: 주기억장치와 입출력장치 사이의 정보 이동 기능

명령어의 형식

  • 컴퓨터 명령어는 컴퓨터 내부구조에 따라 여러 형식으로 나타난다.
  • 명령어 형식은 오퍼랜드의 기억장소에 따른 형식과 오퍼랜드의 수에 따른 형식으로 분류된다.

오퍼랜드의 기억장소에 따른 명령어 형식

누산기를 이용하는 명령어 형식

  • 누산기를 가진 컴퓨터 구조에서 사용되는 형식
  • 누산기(AC): 명령어가 수행될 때 오퍼랜드를 기억시키는 레지스터
  • 1-주소 명령어로서 하나의 기억장치 주소 필드를 사용
  • ADD X
    • AC ← AC+M[X]
    • X: 기억장치에 있는 오퍼랜드의 주소
    • 누산기에 있는 내용과 기억장치 주소 X에 있는 내용을 더해서 누산기로 전송
  • LOAD X
    • AC ← M[X]
    • 기억장치 주소 X에 있는 내용을 누산기로 적재
  • STORE X
    • M[X] ← AC
    • 누산기의 내용을 기억장치 주소 X에 저장

다중 레지스터를 이용한 명령어 형식

  • 중앙처리장치 내에 여러 개의 레지스터를 가지고 있는 컴퓨터 구조에서 사용되는 형식
  • 2-주소 또는 3-주소 명령어 사용
  • ADD R1, R2, R3
    • R3 ← R1 + R2
    • R: 레지스터
    • 세 개의 레지스터를 사용하는 경우 레지스터 R1의 내용과 레지스터 R2의 내용을 더해서 레지스터 R3에 전송
  • ADD R1, R2
    • R2 ← R1 + R2
    • 두 개의 레지스터를 사용하는 경우 레지스터 R1의 내용과 레지스터 R2의 내용을 더해서 레지스터 R2에 전송
  • MOVE R1, R2
    • R2 ← R1
    • 레지스터 R1의 내용을 레지스터 R2로 전송
  • LOAD X, R1
    • R1 ← M[X]
    • 기억장치 주소 X에 있는 내용을 레지스터 R1에 적재
  • STORE R1, X
    • M[X] ← R1
    • 레지스터 R1의 내용을 기억장치 주소 X에 저장

스택 구조를 이용한 명령어 형식

  • 스택을 가진 컴퓨터 구조에서 사용되는 형식
  • 오퍼랜드들과 연산의 결과를 기억장치 스택에 기억시키는 구조
  • 스택 구조에서 함수연산기능의 명령어 형식(ADD, MUL)은 0-주소 명령어로서 주소 필드를 표기하지 않아도 된다. (데이터 전송 명령어 형식은 하나의 주소 사용)
  • ADD
    • TOS ← TOS + TOS-1
    • TOS: Top Of Stack (스택의 맨 위)
    • TOS-1: TOS의 아래 스택
    • 기억장치 스택의 맨 위의 내용과 그 아래의 내용을 더해서 스택의 맨 위로 전송
  • PUSH X
    • TOS ← M[X]
    • 기억장치 주소 X에 저장된 내용을 기억장치 스택의 맨 위로 전송
  • POP X
    • M[X] ← TOS
    • 기억장치 스택의 맨 위에 있는 내용을 기억장치 주소 X로 전송

오퍼랜드의 수에 따른 명령어 형식

3-주소 명령어

  • 오퍼랜드가 3개인 명령어 형식
  • 장점: 산술식을 프로그램화할 때 총 명령어 수가 줄어듬
  • 단점: 2진 코드화 했을 때 비트 수가 다른 주소 명령어 형식보다 많이 필요
  • ex) 산술식 X = (A+B)*C 에 대해 3-주소 명령어를 이용한 프로그램
    • ADD A, B, R1 ; R1 ← M(A) + M(B)
    • MUL R1, C, X ; M(X) ← R1 * M(C)

2-주소 명령어

  • 오퍼랜드가 2개인 명령어 형식
  • 장점: 3-주소 명령어에 비해 명령어의 길이가 짧음
  • 단점: 같은 내용을 수행하기 위해 수행해야 하는 명령어가 많아짐
  • ex) 산술식 X = (A+B)*C 에 대해 2-주소 명령어를 이용한 프로그램
    • LOAD A, R1 ; R1 ← M(A)
    • ADD B, R1 ; R1 ← R1 + M(B)
    • MUL C, R1 ; R1 ← R1 * M(C)
    • STORE R1, X ; M(X) ← R1

1-주소 명령어

  • 오퍼랜드가 1개인 명령어 형식
  • ex) 산술식 X = (A+B)*C 에 대해 1-주소 명령어를 이용한 프로그램
    • LOAD A ; AC ← M(A)
    • ADD B ; AC ← AC + M(B)
    • STORE X ; M(X) ← AC
    • LOAD C ; AC ← M(C)
    • MUL X ; AC ← AC * M(X)
    • STORE X ; M(X) ← AC

0-주소 명령어

  • 주소 필드를 사용하지 않는 명령어 형식
  • 기억장치 스택 사용
  • 장점: 명령어의 길이가 매우 짧아서 기억공간을 적게 차지
  • 단점: 많은 양의 정보가 스택과 기억장치 사이를 이동하게 되어 비효율적
  • ex) 산술식 X = (A+B)*C 에 대해 0-주소 명령어를 이용한 프로그램
    • PUSH A ; TOS ← M(A)
    • PUSH B ; TOS ← M(B)
    • ADD ; TOS ← TOS + TOS-1
    • PUSH C ; TOS ← M(C)
    • MUL ; TOS ← TOS * TOS-1
    • POP X ; M(X) ← TOS

주소지정방식

명령어 주소지정방식

  • 명령어의 오퍼랜드를 변경하거나 해석하는 규칙을 지정
  • 주소지정방식을 사용하면 명령어의 수를 효과적으로 줄일 수 있음
  • 유효주소: 주소지정방식의 각 규칙에 의해 정해지는 오퍼랜드의 실제 주소

주소지정방식의 종류

즉치 주소지정방식

  • 명령어의 오퍼랜드 필드에 실제 사용할 데이터가 저장되어 있음
  • LDA #NBR ; AC ← NBR
    • NBR: 오퍼랜드

직접 주소지정방식

  • 명령어의 주소필드에 오퍼랜드의 주소를 직접 저장
  • LDA ADRS ; AC ← M[ADRS]
    • ADRS: 주소

간접 주소지정방식

  • 명령어의 주소필드에 유효주소가 저장되어 있는 기억장치 주소를 저장
  • LDA [ADRS] ; AC ← M[M[ADRS]]

레지스터 주소지정방식

  • 오퍼랜드 필드에 레지스터 번호 저장
  • 레지스터에 실제 사용할 오퍼랜드 데이터가 들어있음
  • 유효번호가 존재하지 않는다.
  • LDA R1 ; AC ← R1

레지스터 간접 주소지정방식

  • 레지스터에 실제 오퍼랜드가 저장된 기억장치의 주소를 저장
  • LDA (R1) ; AC ← M[R1]

상대 주소지정방식

  • 특정 레지스터의 내용에 명령어 주소필드 값을 더하는 방식
  • 특정 레지스터로 프로그램 카운터(PC)를 주로 사용
  • PC는 프로그램의 시작 주소였다가 프로그램이 수행되면 다음 주소로 변경된다.
  • LDA $ADRS ; AC ← M[ADRS+PC]
    • 유효주소 = 명령어 주소부분의 내용 + PC의 내용

인덱스된 주소지정방식

  • 인덱스 레지스터의 내용을 명령어 주소 부분에 더해서 유효주소를 얻는 방식
  • LDA ADRS(R1) ; AC ← M[ADRS+R1]
    • 유효주소 = 명령어 주소부분의 내용 + 인덱스 레지스터의 내용

주소지정방식 요약

주소지정방식기호표기레지스터 전송유효주소AC
즉치주소LDA #NBRAC ← NBR251500
직접주소LDA ADRSAC ← M[ADRS]500800
간접주소LDA [ADRS]AC ← M[M[ADRS]]800300
상대주소LDA $ADRSAC ← M[ADRS+PC]752600
인덱스주소LDA ADRS(R1)AC ← M[ADRS+R1]900200
레지스터 주소LDA R1AC ← R1-400
레지스터 간접주소LDA (R1)AC ← M[R1]400700
This post is licensed under CC BY 4.0 by the author.