[ 이전 글 ]
[컴퓨터구조] 16비트 컴퓨터 설계하기 - Instruction Cycles
[컴퓨터구조] 16비트 컴퓨터 설계하기 - I/O instruction의 실행 단계에서 벌어지는 일들
이전 글에서 instruction이 fetch되고, decode되고, effective address가 저장되든 말든 하고, execute되는 과정을 보았다. 명령어의 종류에 따라 과정에 차이가 있음을 확인했다.
아래는 16비트 컴퓨터에서 명령어를 수행하는 모든 단계를 보여주고 있는 flowchart다.
컴퓨터 파워가 들어오면 Start부터 딱 시작되어 내려간다.
▶ R=0인 경우에는 일반적인 fetch, decode 단계가 time T0,T1과 time T2 에서 수행된다
▶ 그리고 D7값을 통해 memory-ref 명령어인지 아닌지 판단한다.
- memory-ref 명령이면 effective address를 저장해야 한다. 단 명령어가 indirect모드인 경우만이고, direct모드라면 time T3는 쉬어가는 time이다.
- memory-ref 명령이 아니라면 그런 effective address를 다룰 필요가 없다. operand가 필요하지 않은 연산이라서!
▶ 매번 명령어를 fetch하기 이전에 R이라는 flip-flop을 체크한다. 1이면 input/output이 들어왔다는 신호인 interrupt를 io디바이스에서 보낸 것이다.
▶ 만약 R신호가 떴다면 이제 interrupt cycle을 돌릴 것이다. 총 3 time이자 3 clock이다.
- 특별한 주소 0, 1을 사용한다! 0번지에는 return address를 담아둔다.
- T1에서 메모리 0번지에 본래 PC값인 i+1명령어 번지를 담아두고 PC를 0으로 초기화한다. T2에서 PC를 1 증가시킨다. 이제 다음에 클락이 뜨면 1번지에 있는 명령어가 fetch될 것이다.
▶ interrupt cycle을 벗어나면 PC가 1인 상태에서 다시 inscturction cycle로 간다. 1번지에는 direct로 i/o동작을 처리하는 주소로 branch하는 BUN명령어가 담겨있다. 그 주소로 가서 i/o를 처리하고, 그 처리의 맨 끝에는 0번지로 indirect하게 branch하는 BUN명령이 담겨있다. 그렇게 0번지로 가면 이제 return address가 있고, return address로 branch하면 아까 시작 못했던 i+1번째 명령어를 다시 수행해나가면 된다.
아래는 16비트 Basic 컴퓨터에서 일어나는 모든 micro-operation을 총정리한 테이블이다.
이것이 전부다. 이 외의 연산은 일어날 수 없다.
어떤 레지스터에서 일어나는 연산을 보고 싶으면, 그 레지스터에 무언가를 전송(<-)하고있는 연산을 찾으면 된다. 그렇게 추리면 어떤 레지스터에서 어떤 연산이 일어나는지 확인할 수 있다.
'컴퓨터구조 & OS' 카테고리의 다른 글
[컴퓨터구조] 16비트 컴퓨터에서 프로그래밍하기 - Assembler가 어셈블리 프로그램을 기계어로 번역하는 과정 (0) | 2021.10.18 |
---|---|
[컴퓨터구조] 16비트 컴퓨터에서 프로그래밍 하기 | assembly로 쓰여진 프로그램의 구조 (0) | 2021.10.18 |
[컴퓨터구조] 16비트 컴퓨터 설계하기 - I/O instruction의 실행 단계에서 벌어지는 일들 (0) | 2021.10.16 |
[컴퓨터구조] 16비트 컴퓨터 설계하기 - 명령어의 실행단계에서 벌어지는 일들 (2) | 2021.10.15 |
[컴퓨터구조] 16비트 컴퓨터 설계하기 - Instruction Cycles (2) | 2021.10.15 |