j label
goto label;
...
label: code
Se traduce a
j label
...
label: code
beq rs rt label
if(i != j){
code; }
beq $s0 $s1 done
code
done:
if(i == j){
code_1
} else {
code_2
}
bne $s0 $s1 else code_1 j done else:
code_2 done:
switch(c){
case 'a': code_1;
break;
case 'b': code_2;
case 'c': code_3;
break;
default : code_4; }
li $t0 'a' beq $t0 $s0 a_case
li $t0 'b' beq $t0 $s0 b_case
li $t0 'c' beq $t0 $s0 c_case j default
a_case: code_1
j done b_case:
code 2 c_case: code 3 j done default:
code_4
done:
do { code; i++;
} while(i < j)
do_start:
code addi $s0 $s0 1 blt $s0 $s1 do_start
int i = 42;
while(i != 0){
i--;
}
li $s0 42
test:
beq $s0 $0 done
subi $s0 $s0 1
j test
done:
for(i = 0; i < j; i++){
code;
}
li $s0 0
test:
beq $s0 $s1 done
code
addi $s0 $s0 1
j test
done:
# $t0 = ($s0 < $s1) ? 1 : 0
slt $t0 $s0 $s1
i = (s != NULL) && (*s)
sne $t0 $s1 $zero # $t0 = s!=NULL beqz $t0 skip # ya es falso lw $t0 0($s1) sne $t0 $t0 $zero # $t0 = (*s) != '\0' skip:
add $s0 $t0 $zero # $s0 = $t0
jal label
jr rs
.data bar_str: .asciiz ”- bar\n” foo_str: .asciiz ”foo -" .text main:
jal foo puts bar_str j done
... foo:
puts foo_str jr $ra
done:
...