Beruflich Dokumente
Kultur Dokumente
INSTRUES DE DESVIO
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Instrues para tomada de deciso:
Alteram o fluxo de controle do programa;
Alteram a prxima instruo a ser executada.
Instruo de Desvio:
Salto condicional;
Salto incondicional.
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Instrues MIPS para salto condicional:
Branch if equal (beq);
Branch if not equal (bne);
(j)
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Branch if equal (beq)
beq registrador1, registrador2, L1
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Branch if not equal (bne):
bne registrador1, registrador2, L1
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Desvio incondicional :
J
rotulo
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Supondo que as cinco variveis de f ate j corresponda aos cinco registradores de $s0 a
$s4, qual p cdigo MIPS gerado pelo compilador?
if ( i == j)
f = g + h;
else
f = g h;
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Vejamos a soluo:
bne $s3, $s4, Else
# f = g + h (ignorada se i j )
j Exit
# f = g h (ignorada se i=j)
Exit:
# Label Exit
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Se i, j, e k correspondem aos registradores $s3, $s4 e $s5, e o endereo base do vetor
save est no registrador $s6, qual o cdigo assembly MIPS correspondente?
while (save[i] == k)
i = i + j;
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Temos inicialmente que carregar save[i] para um registrador temporrio:
Loop: add $t1, $s3, $s3
# $t1 = 2*i
add $t2, $t1, $t1
# $t2 = 4*i
add $t3, $t2,$s6
# $t3 = 4*i + $s6 = endereo de save[i]
lw $t4, 0($t3)
# $t4 = valor de save[i]
Agora fazemos o teste do loop, saindo se save[i] != k:
bne $t4, $s5, Exit
# v para Exit se save[i] !=k
No sendo diferente, soma:
add $s3,$s3,$s4
#i=i+j
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Loop: add $t1, $s3, $s3
add $t2, $t1, $t1
add $t3, $t2,$s6
lw $t4, 0($t3)
Exit:
# $t1 = 2*i
# $t2 = 4*i
# $t3 = 4*i + $s6 = endereo de save[i]
# $t4 = valor de save[i]
add $s3,$s3,$s4
#i=i+j
J Loop
# v para o Loop
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Sejam A e B com o endereo de memria dado nos registradores, respectivamente, em $s0 e $s1. Qual o
cdigo assembly MIPS correspondente?
if (A==B)
A++;
else
B++;
_______________________
if (A!=5)
A++;
else
A--;
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Sejam A e B com o endereo de memria dado nos registradores, respectivamente, em
$s0 e $s1. Qual o cdigo assembly MIPS correspondente?
A=0;
while (A!=5)
{
B = A+A;
A = A+1;
}