Loops: while | ||||||||||||
$s1 | i | |||||||||||
If statement uses branch instruction. | $s2 | j | ||||||||||
What about loops? | $s3 | k | ||||||||||
Example: | ||||||||||||
while ( <cond> ) { | L1: if ( <cond> ) { | |||||||||||
<while-body> | <while-body> | |||||||||||
} | goto L1 ; | |||||||||||
} | ||||||||||||
If condition is true, execute body and go back, otherwise do next statement. | ||||||||||||
while ( i < j ) { | L1: if ( i < j ) { | |||||||||||
k++ ; | k++ ; | |||||||||||
i = i * 2 ; | i = i * 2 ; | |||||||||||
} | goto L1 ; | |||||||||||
} | ||||||||||||
L1: | bge $s1, $s2, DONE | # branch if ! ( i < j ) | ||||||||||
addi $s3, $s3, 1 | # k++ | |||||||||||
add $s1, $s1, $s1 | # i = i * 2 | |||||||||||
j L1 | # jump back to top of loop | |||||||||||
DONE: |