dongdorodongdong
CPU 상태 본문
Major State
- 정의
- CPU의 상태를 나타내며 Fetch, Indirect, Execute, Interrupt의 상태가 있음
- 4가지 단계를 반복적으로 거치며 동작을 수행
- Major Cycle 또는 Machine Cycle이라고도 함 - 특징
- Major State Register를 통해 알 수 있음
Fetch (인출 단계)
- 정의
- 명령어를 주기억장치에서 IR(명령 레지스터)로 가져와 해독하는 단계 - 특징
- 해석된 명령어가 1Cycle 명령이면 이를 수행한 후 다시 Fetch Cycle로 변천
- 1Cycle 명령이 아니면 해석된 명령어의 Mode bit에 따라 직접주소와 간접주소를 판단
"Mode bit 0 : 직접주소, Execute 단계로 변천"
"Mode bit 1 : 간접주소, Indirect 단계로 변천" - 순서
MAR <- PC |
PC에 있는 번지를 MAR에 전송 |
MBR <- M[MAR] |
MAR이 지정하는 위치의 값을 MBR에 전송 다음에 실행할 명령의 위치를 지정하기 위해 PC의 값을 1증가 |
IR <- MBR[OP] |
명령어의 OP Code 부분을 IR에 전송 |
F <- 1 또는 R <- 1 |
I가 0이면 플립플롭 F에 1을 전송하여 Execute 단계로 변천 I가 1이면 플립플롭 R에 1을 전송하여 Indirect 단계로 변천 |
Execute (실행 단계)
- 정의
- Fetch 단계에서 인출하여 해석한 명령을 실행하는 단계
- Flag Register의 상태 변화를 검사하여 Interrupt 단계로 변천할 것인지를 판단 - 특징
- Interrupt 요청 신호를 나타내는 Flag Register의 변화가 없으면 Fetch 단계로 변천 - 예시 (ADD 연산 수행)
MAR <- MBR[AD] |
MBR에 있는 명령어의 번지 부분을 MAR에 전송 |
MBR <- M[MAR] |
MAR이 지정하는 위치의 값을 MBR에 전송 |
AC <- AC + MBR |
누산기의 값과 MBR의 값을 더해 누산기에 전송 |
F <- 0 또는 R <- 1 |
* 실행 단계는 F와 R의 플립플롭 상태가 F=1, R=0임 R에 1을 전송하면 F=1, R=1이 되어 Interrupt 단계로 변천 |
Indirect (간접 단계)
- 정의
- Fetch 단계에서 해석된 명령어의 주소부가 간접주소인 경우 수행
- 간접주소일 때, 유효주소를 계산하기 위해 다시 Indirect 단계를 수행
- 간접주소가 아닐 때, 명령어에 따라 Execute 단계 또는 Fetch 단계로 이동할지 판단 - 순서
MAR <- MBR[AD] |
MBR에 있는 명령어의 번지 부분을 MAR에 전송 |
MBR <- M[MAR] |
MAR이 지정하는 위치의 값을 MBR에 전송 |
|
동작 없음 |
F <- 1 R <- 0 |
F에 1, R에 0을 전송하여 Execute 단계로 변천 |
Interrupt (인터럽트 단계)
- 정의
- 인터럽트 발생 시 복귀주소(PC)를 저장시키고, 제어순서를 인터럽트 처리 프로그램의 첫 번째 명령으로 옮기는 단계 - 특징
- 인터럽트 단계를 마친 후에는 항상 Fetch 단계로 변천
- Interrupt가 발생할 때만 실행되어 다른 일을 처리하고 돌아오기 때문에 H/W로 실현되는 서브루틴의 호출이라고도 함 - 순서
MBR[AD] <- PC PC <- 0 |
PC가 가지고 있는 명령의 주소를 MBR의 주소 부분으로 전송 복귀주소를 저장할 0번지를 PC에 전송 |
MAR <- PC PC <- PC + 1 |
PC가 가지고 있는 값 0번지를 MAR에 전송 인터럽트 처리 루틴으로 이동할 수 있는 인터럽트 벡터의 위치를 지정하기 위해 PC의 값을 1 증가 |
M[MAR] <- MBR IEN <- 0 |
다음에 실행할 명령의 주소를 메모리의 MAR이 가리키는 위치인 0번지에 저장 인터럽트 단계가 끝날 때까지 다른 인터럽트가 발생하지 않게 IEN에 0을 전송 |
F <- 0 R <- 0 |
F에 0, R에 0을 전송하여 Fetch 단계로 변천 |
주요 명령 마이크로 오퍼레이션
- ADD ( AC <- AC + M[AD] )
- LDA ( AC <- M[AD] )
- STA ( M[AD] <- AC )
- BSA
MAR <- MBR[AD] |
MBR에 있는 명령어의 번지 부분을 MAR에 전송 |
MBR <- M[MAR] |
MAR이 지정하는 위치의 값을 MBR에 전송 |
AC <- AC + MBR |
누산기의 값과 MBR의 값을 더해 누산기에 전송 |
MAR <- MBR[AD] |
MBR에 있는 명령어의 번지 부분을 MAR에 전송 |
MBR <- M[MAR] AC <- 0 |
MAR이 지정하는 위치의 값을 MBR에 전송 |
AC <- AC + MBR |
메모리에서 가져온 MBR과 AC를 더해 AC에 전송 |
MAR <- MBR[AD] |
MBR에 있는 명령어의 번지 부분을 MAR에 전송 |
MBR <- AC |
AC의 값을 MBR에 전송 |
M(MAR) <- MBR |
MBR의 값을 메모리의 MAR이 지정하는 위치에 전송 |
MAR <- MBR[AD] MBR[AD] <- PC PC <- MBR[AD] |
MBR에 있는 명령어의 번지 부분을 MAR에 전송 * MBR[AD]는 복귀주소가 저장될 위치이면서 부프로그램이 시작되기 바로 전 번지 PC의 값(복귀주소)를 MBR의 주소부분으로 전송 * 복귀주소를 저장하기 위한 준비단계 |
M[MAR] <- MBR[AD] |
MBR에 있는 명령어의 번지 부분을 MAR이 가리키는 위치에 전송 * 부프로그램이 시작되기 바로 전 주소에 복귀주소를 저장 |
PC <- PC + 1 |
PC의 값을 1 증가 * 부프로그램의 시작 |
'Electronic Calculator Architecture' 카테고리의 다른 글
제어 데이터 / 장치 / 메모리 (0) | 2020.07.12 |
---|---|
Micro Operation (마이크로 오퍼레이션) (0) | 2020.07.12 |
Operand (자료부) (0) | 2020.07.01 |
OP Code (연산자부) (0) | 2020.07.01 |
CPU 구성 요소 (0) | 2020.06.21 |