CS/컴퓨터구조

[컴퓨터구조] Branches

gyujh 2023. 10. 22. 01:23
Conditional Operations (조건부 연산자)

값에 따라 결정을 내리는 연산자이다.

 

조건이 true인 경우 labeled instruction으로 branch한다?

조건이 아닌 경우 continue 한다.

 

beq, bne, j의 세 가지 연산자 먼저 보면

1) beq   rs, rt, L1

- rs, rt가 같으면 L1로 점프한다.

2) bne   rs, rt, L1

- rs, rt가 같지 않으면 L1로 점프한다.

3) j        L1

- 그냥 L1으로 점프한다.

 

C에서 쓰는 if-Else가 어떻게 컴파일링될까?
if (i==j)
  f = g + h;
else
  f = g - h;

다음과 같은 c코드가 있다. 한줄씩 해석하면 i가 j와 같다면 + 연산을 하고, 그렇지 않다면 - 연산을 하라는 것이다.

이는 MIPS 코드로 다음과 같다.

bne (같지 않으면 go)기 때문에 s3, s4가 같지 않은경우 else로 간다. 그 후 exit로 간다.

같은 경우에는 add 연산을 실행하고 j를 만나 exit로 바로 간다.

이를 beq로도 할 수 있다.

    beq  $s3, $s4, ADD
    sub  $s0, $s1, $s2
    j    Exit
ADD:add  $s0, $s1, $s2
Exit

 

둘중에 뭐가 더 나은가? C 프로그램을 컴파일러가 바꿔준다. 컴파일러 마음이다.

단순 1:1 translation이 아닌 컴파일러가 아키텍쳐 등을 고려해 성능이 나은 것으로 결정한다.2

 

현재까지는 크기 비교는 알 수 없음. 같다/아니다만 체크

이거로만 가지고 중첩 if-else문도 가능

 

Loop문