Blog | Tag | Local | Guest | Login | Write |  RSS

 하루에 2개 올린다는게 정말 쉬운게 아니군요 ㅠ_ㅠ 하지만 열심히 해야한다는 각오로(이번주에도 시험이 2과목...) 블로그를 올리고 있습니다. ㅋㅋ 컴구조를 지금까지 공부하면서 참 간단하다는 생각을 많이 합니다. 복잡한 구조로 움직이는거 같지 않고요 규칙을 따라 동작하는거 같은데 왜이리 수업시간에는 이해하기도 머리에도 들어오지 않던지...뭐 뒤쪽으로 가면 갈수록 더 어려워지나깐요 정신을 차려야겠지요 지난번 블로그에서 아주 간단히 예를 들으면서 한 클럭싸이클 동안에 어떻게 정해저 있는 간단히 봤는데요 이제 부터 본격적으로 한번 보겠습니다.

 컴퓨터에서 각 명령어 사이클은 다음과 같은 단계들로 이루어제 있습니다.
 
 1. 명령어를 메모리에서 가져온다(fetch라고 합니다.)
 2. 명령어를 디코딩한다.
 3. 간접 주소 방식의 명령어일 경우에 메모리로부터 유효 주소를 읽어온다.
 4. 명령어를 실행한다.

 네번째 단계가 끝나면 다시 첫번째 단계로 돌아가 다음 명령어에 대한 fetch, 디코드, 실행 단계를 반복합니다. 이러한 반복은 HALT명령을 만날 때까지 계속하여 반복합니다. 그럼 각 단계에 대해서 알아보도록 하겠습니다.

 Fetch와 디코드 
 
 초기에 프로그램 카운터는 프로그램의 첫 명령어에 대한 주소를 가지고 있으며, 순차 카운터는 0으로 타이밍 변수 T0를 가리킵니다. 다음에 매 클럭마다 타이밍 변수는 T0, T1, T2와 같은 순서로 변합니다. 이 타이밍 변수들에 맞추어서 Fetch와 디코드 단계에 대한 마이크로 연산은 다음과 같은 레지스터 전송문으로 표시 됩니다.


여기서 AR레지스터만이 메모리의 주소 입력에 연결되어 있으므로, T0시간 동안 PC에서 AR로의 데이타 전송이 필요합니다. 메모리에서 읽어온 명령어는 T1에 해당하는 클럭 변이에서 명령어 레지스터(IR)에 저장됩니다. 동시에 다음 명령어의 주소를 위해 PC가 하나 증가됩니다. 시간 T2에서는 IR의 연산 코드부분이 디토드되고, 간접 비트가 플립플롭 I에 전해지며 주소 부분은 AR로 전송이 됩니다.





 위의 그림은 처음 두 레지스터 전송문을 버스 시스템으로 구현한 것입니다. PC에서 RA로의 데이타 경로를 제공하기 위하여 타이밍 신호 T0를 적용시켜 다음과 같은 연결을 형성해야 합니다.

 1. 버스 선택 입력(S2S1S0)DMF 010으로 하여 PC내용이 버스에 놓이도록 한다.
 2. AR의 LD입력을 인에이블 시켜서 버스의 내용을 AR로 전송한다.

 이와 같은 연결이 이루어졌으면 다음 클럭의 변이에서 PC와 AR 사이에 데이터 전송이 일어납니다. 두번째 문장을 구현하기 위해서는 타이밍 신호 T1을 이용하여 다음과 같은 연결을 형성해야 합니다.

 1. 메모리의 읽기 입력을 인에이블시킨다.
 2. S2S1S0=111로 하여 메모리의 내용이 버스에 놓이도록 한다.
 3. IR의 LD입력을 인에이블시켜 버스의 내용에 IR로 전송한다.
 4. PC의 INR입력을 인에이블시켜 PC의 값을 하나 증가시킨다.

 명령어 종류의 결정

 
시간 T3동안에 제어 장치는 명령어의 종류를 결정합니다.

 위의 그림에서 보듯이 레지스터 참조 혹은 입출력 명령은 T3에서 수행이 되어 지고 메모리 참조 명령은 T4에서 수행이 되어집니다. 기호로 표시하면 다음과 같습니다.

 D7'IT3 : AR<-M[AR]
 D7'IT3 : 아무런 일도 하지 않는다.
 D7I'T3 : 레지스터 참조 명령어를 수행
 D7IT3 : 입출력 명열어를 수행



레지스터 참조 명령어

 레지스터 참조 명령어는 D7=1 이고 I=0 인 명령어로 IR(0-11)에 있는 나머지 12비트로 12가지 명령어를 나타냅니다. 모든 제어 함수는 D7I'T3의 부울식이 필요한데 이것을 간단히 기호 r로 나타내며, IR(0-11)레지스터의 각 비트를 Bi로 표시하여 각 명령어에 대한 제어 함수를 구별합니다. 예를 들어 16진 코드로 7800인 명령어 CLA는 이진 코드로 0111 1000 0000 0000 을 가리키기 때문에 I', D7, B11들이 1의 값을 가집니다. 따라서 이 명령어에 대한 마이크로 연산을 구동시키는 시간 제어 함수는 D7I'T3B11=rB11이 됩니다. 이와 같이 레지스터 참조 명령어는 사간 T3에 수행이 완료되고, 순차 카운터의 타이밍 신호는 다시 T0으로 돌아갑니다.

 처음 7개의 명령어는 AC나 E레지스터에 대한 마이크로 연산을 나타내며 다음의 네 명령어는 주어진 조건이 만족될 때 다음 명령어를 수행하기 위해  PC를 다시 한번 증가시키는 연산을 나타냅니다. 마지막으로 HLT명령은 시작-끝 플립플롭 S를 클리어하고 순차 카운터의 동작을 멈추게 합니다.

다음 블로그에서는 메모리 참조 명령어에 대해서 알아보도록 할게요 그럼 시험기간 모드들 시험 잘보세요^^