j labelgoto 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_caseli $t0 'b' beq $t0 $s0 b_caseli $t0 'c' beq $t0 $s0 c_case j defaulta_case: code_1j done b_case:code 2 c_case: code 3 j done default:code_4done:
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 42test:beq $s0 $0 donesubi $s0 $s0 1j testdone:
for(i = 0; i < j; i++){
code;
}li $s0 0test:beq $s0 $s1 donecodeaddi $s0 $s0 1j testdone:
# $t0 = ($s0 < $s1) ? 1 : 0slt $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 labeljr 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 $radone:...