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문