2013. 5. 20. 16:49ㆍ스마트콘트롤러/논리회로
# 명령어 실행 세 단계 : Fetch -> Decode -> Execution 으로 구분되어 진행됨
이 중 첫번 째 단계가 명령어를 CPU 내부로 가져오는 Fetch 단계인데, 이때 명령어를 가져오게 되는 위치는 바로
프로그램 코드가 존재하는 코드영역이다.
따라서, 컴파일된 프로그램 코드가 코드영역에 올라간 다음부터 명령어는 순서대로
Fetch -> Decode -> Execution 되는것이다.
만약, 명령어가 4바이트고, 실행중인 프로그램이 현재 1036번지에 있는 명령어라면,
다음번에는 1040(1036 + 4)번지에 있는 명령어가 Fetch 되어야 한다.
자 그런데, 여기서 또 고민거리 하나가 생겼다.
-> 어느 위치에 있는 명령어까지 가져와 실행했는지 기억하고 있어야만, 다음번에 실행할 명령어를 가져올 수 있다.
그럼 이 정보를 어디에 두면 좋겠는가?
CPU가 메모리 영역 중 스택을 컨트롤 하기위해 sp레지스터를 두었던 것처럼,
명령어를 순차적으로 Fetch하기 위해서 프로그램 카운터라 불리는 pc레지스터가 필요하다.
그러면, CPU 내부로 명령어를 가져오고 난 후, 다음번에 가져올 명령어 위치를 가리키기 위해서
pc값을 증가시켜야만 하는데, 이 작업을 프로그래머가 해줘야 하는 것일까?
답은 "아니오" . CPU는 Fetch -> Decode -> Execution 과정을 계속 진행하도록 구현되있다.
때문에 Fetch 연산이 일어날때마다 자동적으로 pc값이 증가한다.
즉, 명령어의 순차적 실행을 위해서 우리(프로그래머)가 직접 pc값을 컨트롤 하지 않아도 된다.
하지만, 필요에 따라서, 프로그램상에서 pc값을 직접 조절해야만 하는 경우도 발생을 한다. 이에 대해서는 잠시 후 알아보자.
'스마트콘트롤러 > 논리회로' 카테고리의 다른 글
20130410/ 74LS32칩/OR。동작검사 (0) | 2013.04.10 |
---|---|
20130408/ AND칩 IC7408 이상유무검사 (0) | 2013.04.08 |