beq r1, r2, label
# se r1 == r2, vá para a label
bne r1, r2, label
# se r1 != r2, vá para a label
- Endereçamento de destino do desvio = 4 * label + PC
- Quantidade de instruções a partir da atual
if(i == j)
f = g + h;
else
f = g - h;
- f -> $s0
- g -> $s1
- h -> $s2
- i -> $s3
- j -> $s4
.text
main:
beq $s3, $s4, if
sub $s0, $s1, $s2 # f = g - h
j fim
if:
add $s0, $s1, $s2 # f = g + h
fim:
int i = 0;
while(i < n) {
A[i] = 0;
i++;
}
.text
main:
add $t0, $zero, $zero # i = 0
loop:
slt $t2, $t0, $s0 # i < n?
beq $t2, $zero, exit
sll $t1, $t0, 2 # t1 = i * 4
add $t1, $s1, $t1 # t1 = end. A[i]
sw $zero, 0($t1)
addi $t0, $t0, 1 # i += 1
j loop
exit:
int media(int a, int b) {
return (a + b) / 2;
}
int main() {
media(a, b);
return 0;
}
- Fluxo de chamada a procedimentos:
- Coloque os argumentos nos registradores
- Desvie a execução p/ o procedimento
- Ajusto armazento no procedimento
- Execute o procedimento
- Armazene o resultado nos registradores
- Ajuste o armazenamento
- Retorne ao procedimento chamador
$a0 a $a3
: passagem de argumentos$v0 a $v1
: retorno de procedimentos
$s0 a $s7
: devem ser preservados