[기본원리] 분기문 에서의 프로그램 카운터 값
- 프로그래밍 정보
- 2010. 7. 3.
반응형
CPU , 레지스터, 프로그램 카운터 등에 대한 글을 포스팅 하고 있습니다.
[Programing/기본원리] - 레지스터의 집합체! CPU!
[Programing/기본원리] - 프로그래밍 에서의 CPU .
[Programing/JSP & Servlet] - 클라이언트의 요청은 서블릿이 이렇게 실행합니다!
순차진행의 프로그램 에서는
프로그램 카운터의 값을 계속 1씩 증가하면서 실행된다고 했습니다.
[Programing/기본원리] - 프로그램 카운터가 본 프로그램 실행 원리
그렇지만 순차 진행과는 다르게 프로그램 안에 반복이나 분기문 (조건문 : if 등) 이 있다면 어떻게 될까요?
읽기전에 손가락 한번 클릭~ >_<
고마워요 ~ Chu ~ ♥
분기문에서의 프로그램 카운터 값
프로그램 안에서 반복이나 조건문을 만나면
프로그램 카운터의 값이 +1 이 아닌 다른 값으로 변경됩니다.
예를들어 프로그램 안에서
6과 3을 서로 비교하는 조건문을 만났다고 해보죠.
대략의 소스코드는 아래와 같습니다.
if( 6 > 3 ) {
출력 6;
}
이런 코드를 만나면 프로그램 카운터는 어떻게 동작할까요?
이렇게 작동합니다 ^^;
비교에선 플래그 레지스터를 참조한다.
프로그램 카운터의 값 004 의 명령어가 참(true) 이면 프로그램 카운터의 값은 006으로 변경이 됩니다.
이렇듯 이동되는 명령어는 직전에 실행된 연산 결과를 참조하여 실행여부를 결정하게 되는데요,
CPU 안에 있는 플래그 레지스터가 이 역할을 합니다.
플래그 레지스터에는 방금전에 실행된 연산의 값, 즉 어큐물레이터의 값이 양수, 0, 음수 중 어떤 것인가를 기록합니다. CPU 가 연산을 실행할 때 마다 플래그 레지스터에 값이 등록되죠. 따라서 분기문 실행 이전에 일종의 비교연산이 이루어진다고 할 수 있습니다.
결국 프로그램 카운터의 점프 명령 실행 여부는 플래그 레지스터의 값을 참조하는 것이지요.
그리고 연산 결과가 양수, 0, 음수 중 어떤 것인가를 가지고 플래그 레지스터 안에서 세가지 비트로 나타냅니다
비교 연산은 실제로 빼기 연산으로!
예를들어 x > y 라는 비교가 있다면 CPU 의 연산장치는 내부적으로 빼기 연산을 실행합니다.
빼기로 비교를 어떻게 하냐고요?
아래를 잘 보세요!
x > y 는 실제적으로 x-y 가 됩니다.
이 결과를 플래그 레지스터에 기록하는데요,
결과가 양수라면 x 가 더 큰 경우이고 ( 6-3 = 3 : 양수 )
결과가 0이라면 같은 경우이고 ( 3-3 = 0 : 0 )
결과가 음수라면 x 가 더 작은 경우입니다 ( 2-3 = -1 : 음수 )
즉, CPU는 비교를 할 때 일반적인 수치화를 통해서 사용하는 것입니다.
위에서 언급했다 싶이 비교연산 결과를 플래그 레지스터에 세 비트로 저장한다고 했습니다.
저장되는 구조는 아래와 같습니다.
반응형