MIPS: Resolução dosexercı́cios propostos
Elaine Cecı́lia Gatto 1
1
Portal Embarcados: www.embarcados.com.br
elainececiliagatto@gmail.com
1. Artigo 7: IF Simples
Verificar Tabelas 1, 2 e 3
Código C:
1 if(x==y) go to L2
2 a[1] = b - c;
3 b = a[2] + c;
4 c = b + c[3]
5 L2:
6 a[4] = a[6] + a[5];
2. Artigo 8: IF Composto
2.1. Resolução do Exercı́cio 1
Verificar Figura 1 e Tabelas 4, 5 e 6
Código C:
1 if(a==b){
2 c = a + b;
3 a = b - c;
4 } else{
5 b = a + c;
6 c = b - c;
7 }
Considere:
• BEQ: branch if equal ou desvie se igual. Se a == b desvie para else;
• Se a não é diferente de b [lado esquerdo da figura BEQ], então a só pode ser igual
a b [lado direito da figura BNE];
• BNE: branch if not equal ou desvie se não igual. Se a != b desvie para else;
• Se a não é igual a b [lado esquerdo da figura BNE], então a só pode ser diferente
de b [lado direito da figura BEQ].
• Se (a==b) entra no if e se (a!=b) entra no else. Por isso, vamos usar BNE. O desvio
acontece quando (a!=b), caso contrário não tem desvio! Atente-se a este detalhe.
2.
2.2. Resolução doExercı́cio 2
Verificar Figura 2 e Tabelas 7, 8 e 9
Código C:
1 if(a!=b){
2 c = a - b;
3 a = b + c;
4 } else{
5 b = a - c;
6 c = b + c;
7 }
Considere: Se (a!=b) entra no if e se (a==b) entra no else. Por isso, vamos usar BEQ. O
desvio acontece quando (a==b), caso contrário não tem desvio! Atente-se a este detalhe.
2.3. Resolução do Exercı́cio 3
Verificar Figura 3 e Tabelas 10, 11 e 12
Código C:
1 if(a > b){
2 c = a - b;
3 a = b + c;
4 } else {
5 b = a - c;
6 c = b + c;
7 }
De acordo com a instrução SLT, se o primeiro registrador for menor que o se-
gundo registrador, então o terceiro registrador recebe o valor 1. Se fizermos a seguinte
comparação, vamos descobri que maior é igual a 0 e menor é igual a 1. Portanto, para
entrar no ELSE, o valor de $t0 deve ser 1. Assim, quando $t0 for igual a um, acontece
o desvio. Quem testa isso é a instrução BNE que realiza o desvio quando a desigualdade
entre dois valores é verdadeira!
2.4. Resolução do Exercı́cio 4
Verificar Figura 4 e Tabelas 13, 14 e 15
Código C:
1 if(a > b){
2 c = a - b;
3 a = b + c;
4 } else {
5 b = a - c;
6 c = b + c;
7 }
De acordo com a instrução SLT, se o primeiro registrador for menor que o se-
gundo registrador, então o terceiro registrador recebe o valor 1. Se fizermos a seguinte
comparação, vamos descobri que maior é igual a 0 e menor é igual a 1. Portanto, para
3.
entrar no ELSE,o valor de $t0 deve ser 0. Assim, quando $t0 for igual a 1 acontece o
desvio. Quem testa isso é a instrução BEQ que realiza o desvio quando a igualdade entre
dois valores é verdadeira!
3. Artigo 10: Operações Lógicas
Verificar Figura 5 e Tabelas 16, 17 e 18.
4. Artigo 11: Operação AND
Verificar Figura 6 e Tabelas 19, 20 e 21.
5. Artigo 12: Operação OR
Verificar Figura 7 e Tabelas 22, 23 e 24.
6. Artigo 13: Operação NOT
Verificar Figura 8 e Tabelas 25, 26 e 27.
7. Artigo 16
Verificar Tabelas 28, 29 e 30.
Table 1. Linguagem IF Simples
Inst. Assembly Máquina
1 BEQ $s3, $s4, L2 BEQ $s3, $s4, L2
2 SUB $t0, $s1, $s2 SUB $t0, $s1, $s2
3 SW $t0, 1($s0) SW $t0, 1($s0)
4 LW $t1, 2($s0) LW $t1, 2($s0)
5 ADD $s1, $t1, $s2 ADD $s1, $t1, $s2
6 LW $t2, 3($s2) LW $t2, 3($s2)
7 ADD $s2, $s1, $t2 ADD $s2, $s1, $t2
8 L2 : LW $t0, 6($s0) LW $t0, 6($s0)
9 LW $t1, 5($s0) LW $t1, 5($s0)
10 ADD $t2, $t0, $t1 ADD $t2, $t0, $t1
11 SW $t2, 4($s0) SW $t2, 4($s0)