반응형
어셈블리 프로그램 실행과정의 예
연산 코드에 임의의 정수(10진수) 배정
- LOAD : 1
- STA: 2
- ADD: 5
- JUMP: 8

LOAD(1) 250, PC -> 100번지
- 100번지의 첫 번째 명령어 코드가 인출되어 IR에 저장
- 250번지의 데이터를 AC로 이동
- PC = PC + 1 =101

ADD(5) 251, PC -> 101번지
- 두 번째 명령어가 101번지로부터 인출되어 IR에 저장
- AC의 내용과 251번지의 내용을 더하고, 결과를 AC에 저장
- PC의 내용은 102로 증가

STA(2) 251, PC -> 102번지
- 세 번째 명령어가 102번지로부터 인출되어 IR에 저장
- AC의 내용을 251번지에 저장
- PC의 내용은 103으로 증가

JUMP(8) 170, PC -> 103번지
- 네 번째 명령어가 103 번지로부터 인출되어 IR에 저장
- 분기될 목적지 주소, 즉 IR의 하위 부분(170)이 PC로 적재
- 다음 명령어 인출 사이클에서는 170 번지의 명령어 인출

간접 사이클(indirect cycle)
명령어에 포함되어 있는 주소를 이용하여, 그 명령어 실행에 필요한 데이터의 주소를 인출하는 사이클
- 인출 사이클과 실행 사이클 사이에 위치
- 간접 주소지정 방식(indirect addressing mode)에서 사용

인출된 명령어의 주소 필드 내용을 이용하여 기억장치로부터 데이터의 실제 주소를 인출하여 IR의 주소 필드에 저장
간접 사이클에서 수행될 마이크로-연산
- 네번째 주기(t3) : 명령어 레지스터인 IR에 있는 명령어의 오퍼랜드(addr) 값 을 MAR로 전송
- 다섯번째 주기(t4) : 그 주소 값이 지정하는 기억장치 주소로부터 읽혀진 데 이터를 데이터 버스를 통하여 MBR에 저장
- 여섯번째 주기(t5) : 전송된 MBR의 데이터는 유효주소 정보이기에 그 값을 다시 IR의 주소 필드로 전송
[예] CPU 클록이 2GHz 인 경우 ADD 명령어 내에 간접 사이클 이 포함된 수행 시간
- 인출, 간접, 실행 사이클 : 0.5𝑛s × (3+3+3) =4.5𝑛s
여러 가지 명령어의 종합적인 실행 과정
[예제] 프로그램이 아래 표와 같이 작성되었을 때, 프로그램 실행 시간?(단, CPU클럭은 2GHz이고, 메모리 지연시간은 없다고 가정)

[풀이]
- 클록 주기 = 1 / 2 * 109 = 0.5𝑛s
- LOAD : 인출(3) + 간접(3) + 실행(3) = 9개 클록 주기
- ADD : 인출(3) + 간접(3) + 실행(3) = 9개 클록 주기
- STORE : 인출(3) + 간접(0) + 실행(3) = 6개 클록 주기
- JUMP : 인출(3) + 간접(0) + 실행(1) = 4개 클록 주기
- 프로그램 실행에 총 28개 클록 주기가 요구되므로, 프로그램 실행시간은 28×0.5𝑛s = 14𝑛s