Aula 06 - Instruções de Desvio
-
Upload
joao-henrique-flores-franca -
Category
Documents
-
view
8 -
download
0
description
Transcript of Aula 06 - Instruções de Desvio
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
INSTRUÇÕES DE DESVIOIgor Luiz Oliveira de Souza
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvio
Instruções para tomada de decisão: Alteram o fluxo de controle do programa; Alteram a “próxima” instrução a ser executada.
Instrução de Desvio:
Salto condicional;
Salto incondicional.
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvio
Instruções MIPS para salto condicional: Branch if equal (beq); Branch if not equal (bne);
Instruções MIPS para salto incondicional
jump (j)
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvio
Branch if equal (beq)
beq registrador1, registrador2, L1
Semântica: Ir até a instrução rotulada por L1 se o valor no registrador 1 for igual ao valor no registrador 2
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvio
Branch if not equal (bne):
bne registrador1, registrador2, L1
Semântica: Ir até a instrução rotulada por L1 se o valor no registrador 1 não for igual ao valor no registrador 2
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvio
Desvio incondicional :
J rotulo
Semântica: Ir para o rótulo especificado, incondicionalmente.
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvioSupondo que as cinco variáveis de f ate j corresponda aos cinco registradores de $s0 a $s4, qual p código MIPS gerado pelo compilador?
if ( i == j)
f = g + h;
else
f = g – h;
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvioVejamos a solução:
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 MIPSLinguagem de Montagem (Assembly) – Instruções de desvioSe i, j, e k correspondem aos registradores $s3, $s4 e $s5, e o endereço base do vetorsave está no registrador $s6, qual o código assembly MIPS correspondente?
while (save[i] == k)
i = i + j;
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvioTemos inicialmente que carregar save[i] para um registrador temporário:Loop: add $t1, $s3, $s3 # $t1 = 2*i
add $t2, $t1, $t1 # $t2 = 4*iadd $t3, $t2,$s6 # $t3 = 4*i + $s6 = endereço 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
Não sendo diferente, soma:add $s3,$s3,$s4 # i = i + j
Devemos então voltar para o while no início do loopJ Loop # vá para o Loop
Exit:
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvio
Loop: add $t1, $s3, $s3 # $t1 = 2*iadd $t2, $t1, $t1 # $t2 = 4*iadd $t3, $t2,$s6 # $t3 = 4*i + $s6 = endereço de save[i]lw $t4, 0($t3) # $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 LoopExit:
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvioSejam A e B com o endereço de memória dado nos registradores, respectivamente, em $s0 e $s1. Qual ocódigo assembly MIPS correspondente?
if (A==B)A++;
elseB++;
_______________________
if (A!=5)
A++;
else
A--;
ARQUITETURA MIPSLinguagem de Montagem (Assembly) – Instruções de desvioSejam A e B com o endereço de memória dado nos registradores, respectivamente, em$s0 e $s1. Qual o código assembly MIPS correspondente?
A=0;
while (A!=5){
B = A+A;A = A+1;
}