Fundamental of CS/: : Computer Architecture

CPU & System BUS

Jay.P Morgan 2023. 11. 2. 23:46

 

 

 

  명령어 처리 절차 (Instruction Processing)

 

   1. FETCH

    메모리에 저장된 명령어를 읽어오는 과정이다. PC에 저장된 메모리 주소를 MAR에 저장하여 명령어를 MDR로 읽어 들이고, MDR에 저장된 명령어를 IR로 옮기면 된다. 그리고 PC의 값을 1만큼 증가시켜서 다음 FETCH를 수행할 때는 바로 다음에 위치한 명령어를 읽을 수 있게 한다.

 

   2. DECODE

    명령어가 어떤 종류의 명령인지 파악하는 과정이다. 명령어의 opcode에 해당하는 부분을 CPU 내 Decoder에 입력하여 어떤 명령인지 파악하고, 그것에 따라 opcode를 제외한 나머지 비트를 해석하는 방법을 결정하게 된다. 예를 들어 ADD 명령어는 opcode를 제외한 하위 비트 중 어떤 부분은 첫 번째 피연산자에 해당할 것이고, 어떤 부분은 두 번째 피연산자에 해당할 것이다.

 

   3. EVALUATE ADDRESS

    명령어가 필요로 하는 데이터가 메모리에 위치한 경우, 그 데이터가 위치한 메모리 공간의 주소를 계산해내는 과정을 의미한다. 데이터의 위치를 비트 위에 표현하는 방식을 주소지정방식이라 부른다고 앞서 말한 바 있다. 이 단계에서는 해당 명령어의 주소지정방식대로 비트를 해석하여 접근하고자 하는 메모리 주소를 계산하게 된다. 가령 Base + Offset 모드라고 불리는 주소지정방식을 사용하는 명령어의 경우, 레지스터의 번호와 오프셋이 명령어 비트에 표현되어 있다. 그러면 해당 레지스터의 값과 오프셋을 더해서 접근하고자 하는 메모리 주소를 알아내게 된다.

 

   4. FETCH OPERANDS

    명령어 실행에 필요한 데이터를 가져오는 과정이다. 어떤 명령어는 메모리에서 데이터를 가져올 수도 있고, 어떤 명령어는 레지스터에서 데이터를 가져올 수도 있다. 참고로 그렇게 가져오는 데이터를 Source Operand라고 부른다.

 

   5. EXECUTE

    앞선 과정에서 가져온 데이터를 대상으로 필요한 연산을 실제로 실행하는 과정이다. 예를 들어 ADD 명령어는 두 개의 레지스터에서 가져온 데이터를 대상으로 덧셈을 수행할 것이다. 반면 단순히 메모리에 데이터를 쓰거나 메모리로부터 데이터를 읽어오는 명령어의 경우에는 이 단계에서 아무것도 실행하지 않을 것이다. 한편, 기본적으로는 명령어가 순차적으로 실행되지만 조건문이나 함수 호출 등의 경우에는 실행 흐름을 갑자기 바꿔줘야 한다. 그리고 이를 위한 명령어도 따로 존재한다(LC-3의 경우에는 JMP, BRnz 명령어가 이에 해당함). 그런 명령어들의 경우에는 EXECUTE 단계에서 PC 값을 원하는 명령어의 주소로 바꿔주게 된다. 그러면 앞선 FETCH 단계에서 PC를 1만큼 증가시켰던 동작이 완전히 무시되고, 다음 FETCH 단계를 마주했을 때 원하는 명령어를 읽어와서 실행하게 된다.

 

   6. STORE RESULT

    연산 결과를 레지스터 혹은 메모리에 쓰는 과정이다. 메모리에 쓰는 과정의 경우에는, 먼저 쓰고자 하는 데이터를 MDR에 저장하고 데이터를 쓸 위치(메모리 주소)를 MAR에 저장한 뒤 마지막으로 WE 신호를 활성화시켜줄 것이다. STORE RESULT 단계가 마무리되면 앞서 업데이트된 PC의 값을 기반으로 새로운 명령어 사이클이 시작될 것이다.