본문 바로가기

운영체제

중앙처리장치(CPU) - 2 (CPU 명령어)

728x90
반응형

Goal

  • 명령어가 어떻게 구성되어 있는지 이해하고, 명령어 구성에 따른 특징에 대해 설명할 수 있다.

마이크로 연산(micro-operation)

  • CPU에서 한 클럭 펄스(clock pulse) 동안에 일어나는 세부 동작이다.
  • micro-ops 또는 μops 로도 표시
  • 기계어 또는 어셈블리 명령어는 여러 개의 마이크로연산이 합쳐진 일종의 매크로(macro) 명령어 형태이다.
  • 따라서, 하나의 CPU 명령어는 여러 개의 클럭 펄스를 필요로 한다.

 

명령어 세트(Instruction Set)

  • CPU가 이해하고 동작시킬 수 있도록 정의되는 명령어들의 집합이다.
  • 컴퓨터구조의 일부이기 때문에 ISA(Instruction Set Architecture)라고도 한다.
  • CPU마다 명령어의 길이나 구조가 다를 수 있다. 즉, 같은 C언어로 작성된 코드라도 다른 CPU에서 동작하게 하려면 다른 컴파일러의 도움이 필요하다

 

명령어 형식(instruction format)

instruction은 크게 opcode, operand 필드로 구성되어있다.

 

  • opcode : 연산의 동작(종류, 방법)을 나타내는 비트열
  • operand : 연산에 필요한 데이터 또는 데이터의 주소 또는 레지스터 번호

instruction의 operand 개수에 따라 다음과 같이 분류 할 수 있다.

형식 상세 설명 사례
0-주소 명령어 형식 - 연산 코드만 존재
- Stack 사용. 연산자와 피연산자를 스택에 넣고 뺴내어 연산한 결과를 스택에 다시 저장하는 구조
push, pop 연산
1-주소 명령어 형식 - 1개의 피연산자를 포함
- 누산기(AC)를 이용한 연산 처리 
LOAD X ;
AC ← M[X]
2-주소 명령어 형식 - 2개의 피연산자를 포함
- 연산 결과를 operand1 에 저장 (기존 데이터 없어짐)
MOV X, Y;
M[X] ← M[Y]
3-주소 명령어 형식 - 3개의 피연산자를 포함
- 연산 결과를 operand3에 저장(operand1, 2의 기존 데이터는 그대로 유지)
- 프로그램 길이가 짧아질 수 있다. (2-주소 명령어를 사용했을 때보다 더 적은 마이크로연산으로 표현 가능) (장점)
- 하나의 명령어 길이가 길어지고 기억장치 접근 횟수가 늘어난다. (단점)
ADD X, Y, Z;
M[X] ← M[Y] + M[Z]

 

주소지정 방식(addressing mode)

주소 지정방식(Addressing mode)이란?

  • 명령어에 포함된 operand를 지정하는 방법
  • operand가 나타내는 실제 데이터 및 유효 주소(effective address)를 찾아내는 방법을 나타낸다.
  • 주소 지정 방식을 사용하면 명령어 길이의 비트 수 제약에서 벗어나 더 큰 기억용량이나 더 큰 단위의 데이터를 처리할 수 있게된다. (장점)

*유효 주소(effective adress) : 데이터가 저장된 기억장치의 실제 주소

 

주소지정 방식의 종류

  1. 암시적 주소지정 방식(implied addressing mode)
  2. 즉치 주소지정 방식(immediate addressing mode)
  3. 직접 주소지정 방식(direct addressing mode)
  4. 간접 주소지정 방식(indirect addressing mode)
  5. 레지스터 주소지정 방식(register addressing mode)
  6. 레지스터 간접 주소지정 방식(register indirect addressing mode)
  7. 변위 주소지정 방식(displacement addressing mode)
    • 상대 주소지정 방식(relative addressing mode)
    • 인덱스 주소지정 방식(index addressing mode)
    • 베이스-레지스터 주소지정 방식(base-register addressing mode)

 

암시적 주소지정 방식(implied addressing mode)

  • opcode 만으로 특정 레지스터 동작을 암시한다. (암묵적으로 필요한 데이터 위치를 나타냄)
    • ex) SHL : 누산기 내용을 왼쪽으로 shift
    • ex) INC : 누산기의 값을 1 증가
  • 장점 : 명령어 길이가 짧다.
  • 단점 : 종류가 제한된다.

 

즉치 주소지정 방식(immediate addressing mode)

  • operand에 즉시 사용할 수 있는 데이터를 저장
    • ex) 레지스터나 변수들의 초기값을 특정 상수값으로 초기화 하는 경우
  • 장점 : 특정 기억장치에 접근할 필요가 없음
  • 단점 : 상수값의 크기가 operand 크기에 제한된다.

 

직접 주소지정 방식(direct addressing mode)

  • operand가 유효주소를 직접 저장
    • ex) ADD R1, [0x1000] == R1 <- R1 + M[0x1000]
  • 장점 : 한번의 기억장치 접근만 필요하다.
  • 단점 : 주소의 크기가 operand 크기에 제한된다.

 

간접 주소지정 방식(indirect addressing mode)

  • operand에 유효 주소가 들어 메모리 주소를 저장. operand -> memory -> effective address
    • ex) ADD R1, [ [0x1000] ] == R1 <- R1 + M[ [M[0x1000] ]
  • 명령어 형식에서 간접 주소지정인지, 직접 주소 지정인지 확인할 수 있는 1bit 가 필요
  • 장점
    • 접근 가능한 주소공간의 크기가 워드 크기만큼 확장
    • 워드 크기가 n비트 라면 2^n개의 주소 지정이 가능
  • 단점 : 실제 데이터에 접근하기 위해서 기억 장치에 두 번 접근해야 한다.

 

레지스터 주소지정 방식(register addressing mode)

  • operand에 데이터를 저장하고 있는 레지스터 번호를 저장
    • ex) ADD R1, R2; == R1 <- R1 + R2
  • 장점
    • operand 필드의 비트 수가 적어도 된다.
    • register로 접근하므로 빠르다.
  • 단점 : 데이터가 저장될 수 있는 공간이 CPU 내부 레지스터들로 제한된다. (무한정 사용할 수 없다)

 

레지스터 간접 주소지정 방식(register indirect addressing mode)

  • operand에 유효주소를 저장하고 있는 레지스터 번호를 저장
    • ex) ADD R1, [R2]; == R1 <- R1 + M[R2]
  • 장점 : 접근 가능한 주소 공간의 범위가 레지스터 크기에 비례 (32bit 라면 2^32까지 표현 가능)

 

변위 주소지정 방식(displacement addressing mode)

  • operand 필드를 직접 주소와 오프셋으로 구성
    • ex) EA = R + A
  • 변위 주소지정 방식은 사용 되는 레지스터 종류에 따라 다음과 같이 분류된다.
    • PC => 상대 주소지정 방식
    • index register => 인덱스 주소지정 방식
    • base register => 베이스 주소지정 방식

 

변위 주소지정 방식 사용 예

  • 상대 주소 지정방식 : JUMP 명령어 수행시 PC를 기준으로 앞 또는 뒤쪽으로 분기 가
    • ex) EA = (PC) + A; PC가 450이고 A가 -21이라면 EA는 429가 된다.
  •  인덱스 주소지정 방식 : 배열 인덱스 접근
    • ex) EA = (IX) + A;
  • 베이스 주소지정 방식 : 서로 다른 세그먼트 내 프로그램의 위치 지정
    • ex) EA = (BR) + A;

 

 

References

명령어 형식과 주소지정 방식

728x90
반응형