Micro-Operations이 무엇인지, 실제 control을 위해서 어떤 기법들이 사용되는지 알아보자
위 그림을 살펴보면
Instruction을 Fetch 해서 decoding 하고
Operand의 주소를 계산해서 Operand를 Fetch 하고(Multiple operands 라면 반복)
Data 연산을 수행하고
Operand의 결과를 저장하고
Interrupt를 체크하고 Interrupt가 발생하면 Instruction 주소를 계산하는 위치로 되돌아가는
위 작업이 한 cycle인 것처럼 보인다.
하지만 Data operation이나 interrupt check 같은 경우에는 해당 작업만 하더라도 무수히 많은 cycle이 돌아간다.
따라서 각각의 동작을 세부적인 연산으로 나는 것을 Micro-Operations라고 한다.
하나의 cycle도 내부적으로 많은 cycle로 구성될 수 있다.
위 그림을 보면 Insturction Cycle은 Fetch, Indirect, Execite, Interrupt 같은 각각의 cycle을 가진 작업들로 구성된다.
그리고 Fetch나 Indirect같은 연산을 살펴보면 그 안에도 여러 micro-operation으로 구성되어 있다.
MAR : Address Bus와 연결되어 있다. 메모리의 어느 위치에 접근할지에 대한 정보가 있다.
MBR : Data Bus와 연결되어 있다. Data Bus를 통해서 무언가를 읽고자 하거나 쓰고자 할 때 사용된다.
Program Counter(PC) : 다음번에 실행할 명령어의 주소를 가지고 있다.
Intruction Register(IR) : 가져온 마지막 명령이 저장되어있다.
위의 Fetch 작업을 Symbolic하게 나타내 보았다.
Fetch Sequence를 그림으로 알아보자
PC에 1100100이라는 주소가 있다.
PC의 주소정보가 MAR로 이동한다.
MAR에서 Address Bus를 통해 메모리 정보를 전달하고 Control signal이 발생한다.
MBR에 있는 주소를 통해 메모리에서 읽은 정보가 Data Bus를 통해서 MBR에 저장된다.
MBR에 있는 Data가 decoding을 위해서 IR로 복사되었다.
이를 통해서 Fetch는 여러개의 micro-operation을 가짐을 알 수 있다.
규칙 : (Memory -> MBR) & (MBR -> IR) 같이 동시에 일어나는 cycle은 금지한다.
Interrupt가 발생하여 현재의 실행 주소를 save_address영역에 저장하는 작업이다.
ADD R1, X : R1에 있는 정보와 X주소에 있는 정보를 더해서 R1에 저장하라
ISZ X : X위치에 있는 값을 ++하고 만약 0이면 바로 다음 명령어를 skip
위 과정을 알아보자
BSA X : BSA 명령의 다음 명령의 주소가 X에 저장된다.
135번 주소에 BSA의 다음 명령의 주소인 21이 저장된다.
그리고 136번 주소에 있는 명령이 수행된다.
명령을 마치면 BUN 135에 의해 135번지에 저장된 주소로 다시 돌아간다.
Control Unit은 지금까지 보았던 micro-operation들을 잘 수행하기 위해서 Control signal을 만들어 준다.
위 그림에서 만약 Fetch 명령을 수행하려면 어느 부분을 제어해야 할까?