Você está na página 1de 13

ARQUITETURA E ORGANIZAO DE COMPUTADORES

INSTRUES DE DESVIO

Igor Luiz Oliveira de Souza

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);

Instrues MIPS para salto incondicional


jump

(j)

ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Branch if equal (beq)
beq registrador1, registrador2, L1

Semntica: Ir at a instruo rotulada por L1 se o valor no registrador 1 for igual ao


valor no registrador 2

ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Branch if not equal (bne):
bne registrador1, registrador2, L1

Semntica: Ir at a instruo rotulada por L1 se o valor no registrador 1 no for


igual ao valor no registrador 2

ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de desvio
Desvio incondicional :
J

rotulo

Semntica: Ir para o rtulo especificado, incondicionalmente.

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

# Desvia para Else se i j

add $s0, $s1, $s2

# f = g + h (ignorada se i j )

j Exit

# Desvia para Exit

Else: sub $s0, $s1, $s2

# 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

Devemos ento voltar para o while no incio do loop


J Loop
# v para o Loop
Exit:

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]

bne $t4, $s5, Exit

# v para Exit se save[i] !=k

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;
}

Você também pode gostar