명령어세트 - 명령어형식

원래벌레·2022년 3월 28일
0

💎 명령어 세트


  • 어떤 CPU를 위하여 정의되어 있는 명령어들의 집합

  • 명령어 세트 설계를 위해 결정되어야 하는 사항들
    1) 연산종류 2)데이터형태 3)명령어형식 4)주소지정방식

    이중 우리가 눈여겨 볼 부분은 명령어형식 부분이다.
    명령어형식은 운영체제와 연관이 크다.
    정확한 부가 설명은 알게되면 수정하겠다.

💎 연산의종류 - 프로그램제어(분기,서브루틴)


이 글에서는 서브루틴의 관한 몇가지 예를 살펴 보겠다.

  • CALL 명령어 : 현재의 PC 내용을 스택에 저장하고 서브루틴의 시작 주소로 분기하는 명령어
    -CALL 명령어의 마이크로 연산 : 명령어를 실행 하는 도중에 CALL 명령어를 만났습니다. 이런 경우에는 콜 명령어의 밑에 주소 즉 PC에 있는 값을 MBR에 넣어주고, MAR에 스택의 값을 넣어주고, PC에 서브루틴의 주소를 넣어줍니다. 이렇게 되면 메모리장치에 스택이 가리키는 곳에는 전에 하고 있던 일의 주소가 저장되고, 서브루틴은 PC에 있기 때문에 실행됩니다. 그리고 스택의 값을 하나 감소 시킵니다.

  • 리턴 명령어 : CPU가 원래 실행하던 프로그램으로 복귀 시키는 명령어
    -RET 명령어의 마이크로 연산 : 명령어를 도는중 리턴 명령어를 만나게 되면, 일단 스택의 값을 하나 증가 시켜주고, 해당 값을 MAR에 넣어주어, 해당 주소에 있는 값을 PC에 넣어줍니다.

콜 명령어와 인터럽트 사이클 간의 차이점 :
1) 콜 명령어는 분기가 일어날 것을 미리 알고 있다.
2) 콜 명령어는 실행사이클에서 일어나지만 인터럽트 사이클은 명령어가 끝난 후, 인터럽트 신호를 받고 일어나서 ISR이라는 다른 프로그램으로 분기함.

💎 명령어 형식

  • 명령어는 연산코드, 오퍼랜드, 다음명령어주소(사실 얘도 오퍼랜드임)로 구성되어 있다.

  • 필드 : 이러한 명령어 형식의 부분으로, 연산코드와 오퍼랜드 각각이 묶여있는 비트들의 그룹이다.

  • 명령어의 길이 = 단어 길이

  • 연산 코드의 길이 : 연산의 개수를 결정한다. 예를 들어서 비트수가 4개이면, 16가지의 연산을 할 수 있다. 명령어 길이가 정해져 있을 때, 연산 코드의 길이를 증가시키면 그만큼 오퍼랜드 길이가 줄어든다.

  • 오퍼랜드 필드의 길이 : 오퍼랜드의 범위 결정
    오퍼랜드 안에는 데이터, 기억장치 주소, 레지스터의 번호 등이 올 수 있다. 그렇기 때문에 오퍼랜드의 필드의 길이에 따라서 각각 데이터의 표현 범위, 기억장치 주소의 가지 수(기억장치 용량), 레지스터 번호의 가지수를 결정한다. 예를 들어서 오퍼랜드의 한 필드가 4비트이면 그 필드는 총 0~15의 데이터, 16크기 만큼의 기억장치, 0~15번까지의 레지스터 번호를 사용 할 수 있다.

💎 오퍼랜드의 수에 따른 명령어 분류

명령어들은 여러개의 오퍼랜드를 가질 수도 있다.
그의 따라서 분류를 하는데, 여기서는 3주소 까지만 살펴 보겠다.

먼저 2주소 명령어에 대해서 짧게 살펴 보겠다.
만약에 오퍼랜드1이 4비트 그리고 오퍼랜드2가 8비트를 가진다 할때, 여기서 오퍼랜드1은 레지스터 번호를 16개 사용가능하고, 그리고 오퍼랜드2는 기억장치의 주소범위 0~255번지 까지를 사용 할 수 있다. 뭐 이런식으로 사용 된다.

이러한 오퍼랜드는 합쳐져서도 사용 될 수 있다.
이를 두 개의 오퍼랜드를 하나로 통합하려 사용하는 경우이다.
이 경우에는 4비트와 8비트가 더해져서 12비트를 가지고 표현 할 수 있다.

이제 오퍼랜드 수에 따라서 명령어가 어떻게 사용되는지를 알아보자.

  • 1주소명령 : 오퍼랜드 한개만 갖는 명령어
    ex) ADD X : AC <ㅡ AC+M[X]

  • 2주소명령 : 두 개의 오퍼랜드를 갖는 명령어
    ex) ADD R1, R2 : R1 <ㅡ R1+R2

  • 3주소명령 : 세 개의 오퍼랜드를 갖는 명령어
    ex) ADD R1,R2,R3 : R1 <ㅡ R2+R3

같은 명령어를 실행 하더라도, 이 주소명령의 따라서 각각의 프로그램길이와 명령어의 길이가 다르다. 먼저 1주소 명령어 같은 경우 오퍼랜드를 하나 밖에 사용하지 않기 때문에 명령어의 길이는 짧지만, 프로그램의 길이가 너무 길다. 그리고 2,3 주소 명령어로 갈 수록, 프로그램의 길이는 짧아지지만, 명령어의 길이가 길어지게 된다. 이러한 경우에서 누가 더 좋거나 나쁘다 라고 이야기는 할 수 없다. 그냥 그상황에 맞춰 어떤게 더 좋을 수도 나쁠 수도 있는 것이다.
일단 이책에서는 3주소 명령을 사용 할때에 단점이 적혀 있다.

  • 단점 : 명령어의 길이가 길어져 명령어 해독 과정이 복잡해진다.

이 문제와 관련된 내용은 CISC RISC 내용과 관련이 있다.

profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글

관련 채용 정보