최종 수정 : 25.1.4
명령어 사이클에서의 제어신호
마이크로 연산의 수행을 위해서 제어신호를 공급해야 하는데 클록 발생기와 동기 되어서 정확한 시점에 발생되어야 한다. 이러한 제어신호는 중앙처리장치의 상태에 따라 달라진다.
모든 컴퓨터의 명령어 수행은 가장 근본적인 마이크로 연산을 통해서 이루어진다. 프로그램을 실행한다는 것은 컴퓨터가 명령어 사이클로 이루어져 있는 프로그램을 순차적으로 수행하는 것이다. 기본 명령어 사이클은 인출 사이클(fetch cycle)과 실행 사이클(excution cycle)로 구성된다. 우선 인출 사이크리 시작되고 나서 이것이 종료하면 그 신호에서 다시 인출 사이클로 제어신호가 되돌려지며 이것이 상호 반복되어 차ㅖ차례로 명령어가 실행된다. 명령어 사이클의 확장으로 인출 사이클과 실행 사이클 이외에도 간접 사이클(indirect cycle)과 인터럽트 사이클(interrupt cycle)이 있다. 간접 사이클은 명령어가 간접주소지정 방식일 때 다시 주기억장치를 액세스한다. 인터럽트 사이클은 명령어를 실행하는 도중에 인터럽트가 발생하면 해당된 인터럽트 처리를 수행한다. 이것을 메이저 상태라 한다. 중앙처리장치가 한 메이저 상태에 머물러 있는 동안을 머신 사이클(machine cycle)이라고 한다. 메이저 상태를 더 세분화시킨 것을 타이밍 상태라고 한다. 타이밍 상태는 메이저 상태에서 마크로 연산이 수행되는 시간이다.
메이저 상태 | 기능 |
인출 (fetch) |
1. 실행할 명령어를 주기억장치에서 읽어온다. 2. 명령어를 해독한다. 3. 1-사이클 명령어이면 실행 후에 다시 인출 사이클로 이동한다. 4. 1-사이클 명령어가 아니면 유효주소를 계산하여 간접주소이면 indirect로, 아니면 execute로 이동한다. |
간접 (indirect) |
1. 주소를 주기억장치에서 읽어온다. 2. 만약 간접주소이면 다시 indirect로 이동한다. 3. 분기명령이면 실행 후 fetch로 이동한다. 분기명령이 아니면 execute로 이동한다. |
실행 (execute) |
1. 데이터를 주기억장치에서 읽는다. 2. 실행 후에는 latch로 이동한다. |
인터럽트 (interrupt) |
1. PC의 내용을 스택에 저장한다. (복귀 주소) 2. PC는 인터럽트의 시작주소로 변경된다. 3. 인터럽트 모드로 설정한다. (상태 레지스터의 l비트 = 1) 4. 인터럽트 처리루틴의 fetch로 이동한다. |
중앙처리장치의 메이저 상태를 구별하기 위해서 두 비트 F, R에 의해서 구분된다.
플립플롭 | 제어신호 | 메이저 상태 | |
F | R | ||
0 | 0 | C0 | 인출(fetch) 사이클 |
0 | 1 | C1 | 간접(indirect) 사이클 |
1 | 0 | C2 | 실행(execute) 사이클 |
1 | 1 | C3 | 인터럽트(interruput) 사이클 |
1. 명령어 인출 사이클(fetch cycle)
주기억장치에서 명령어를 읽어 오는 단계를 인출 사이클이라 한다. 첫 번째 단계 t0 시간에 PC의 주소를 MAR에 옮기고, 두 번째 단계 t1 시간에 명령어를 읽어 오고 PC가 증가한다. 세 번째 단계 t2 시간에 MBR의 내용이 IR에 전송되고 IR의 연산코드는 해독되고 간접주소지정방식을 표시하는 IR15 코드는 간접비트 l에 저장하고, 주소코드는 MAR로 전송된다.
- t0: MAR ← PC
- t1 : MBR ← M[MAR], PC ← PC + 1
- t2 : IR ← MBR
2. 명령어 간접 사이클(indirect cycle)
일단 명령어가 인출되면 데이터를 인출해야 한다. 직접번지 지정방식인 경우에는 실행 사이클로 이동하고 간접주소지정방식인 경우는 실행 사이클 전에 간접 사이클이 실행된다.
명령어에 포함된 주소는 데이터가 있는 주소를 나타낸다. 유효주소를 구하기 위해서 한 번 더 기억 장치에 접근하는 동작을 간접 사이클이라 한다.
- t0 : MAR ← IR(addr)
- t1 : MBR ← M[MAR]
- t2 : IR(addr) ← MBR
3. 명령어 실행 사이클(execute cycle)
실행 사이클은 각 연산코드마다 별도의 마이크로 순서가 있다.
1) 덧셈 명령 ADD X
누산기의 내용과 X번지의 내용을 더해서 누산기에 저장하는 명령어이다.
- t0 : MBR ← M[MAR]
- t1 : AC ← AC + MBR
2) LDA X
X번지에서 데이터를 읽어서 누산기에 저장하는 명령어이다.
- t0 : MBR ←M[MAR]
- t1 : AC ← MBR
3) STA X
누산기의 내용을 X번지에 저장하는 명령어이다.
- t0 : M[MAR] ← AC
4) ISZ X
X번지의 내용을 1 증가시키고 결과값이 0이면 다음 명령어를 실행하지 않고 그 다음 명령어로 건너뛰는 명령어이다.
- t0 : MBR ← M[MAR]
- t1 : MBR ← MBR + 1
- t2 : M[MAR] ←MBR, if(MBR = 0) then (PC ← PC + 1)
5) AND X
누산기와 X번지 내용과 논리연산 AND를 실행해서 결과값은 누산기에 저장하는 명령어이다.
- t0: MBR ← M[MAR]
- t1 : AC ← AC ∧ MBR
4. 명령어 인터럽트 사이클(interrupt cycle)
중앙처리장치는 명령어 실행 사이클의 마지막에 인터럽트가 발생되었는지를 검사하고, 이때 인터럽트가 발생했으면 현재 실행 중인 명령어를 실행한 후 인터럽트 사이클로 들어간다. 현재 수행 중인 프로그램의 PC의 값은 주기억장치인 스택영역이나, 0번지에 저장하고 인터럽트의 시작 번지를 PC에 넣는다. 그리고 나서 PC에 저장된 인터럽트 루틴을 수행한다.
- t0 : MBR ← PC
- t1 : MAR ← SP, PC ← ISR의 시작주소(ISR, 인터럽트 서비스 루틴)
- t2 : M[MAR] ← MBR
참고
독학사 교재
'CS 공부 > 컴퓨터 구조' 카테고리의 다른 글
하드와이어드 제어방식 (0) | 2025.01.05 |
---|---|
마이크로프로그램 제어방식 (0) | 2025.01.05 |
제어장치의 기능과 구조 (0) | 2025.01.04 |
RISC와 CISC (0) | 2025.01.02 |
명령어 파이프라이닝 (0) | 2025.01.02 |
댓글