1. MIPS: Resoluc¸˜ao dos exerc´ı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´odigo 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. Resoluc¸˜ao do Exerc´ıcio 1
Verificar Figura 1 e Tabelas 4, 5 e 6
C´odigo 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˜ao ´e diferente de b [lado esquerdo da figura BEQ], ent˜ao a s´o pode ser igual
a b [lado direito da figura BNE];
• BNE: branch if not equal ou desvie se n˜ao igual. Se a != b desvie para else;
• Se a n˜ao ´e igual a b [lado esquerdo da figura BNE], ent˜ao a s´o 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´ario n˜ao tem desvio! Atente-se a este detalhe.
2. 2.2. Resoluc¸˜ao do Exerc´ıcio 2
Verificar Figura 2 e Tabelas 7, 8 e 9
C´odigo 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´ario n˜ao tem desvio! Atente-se a este detalhe.
2.3. Resoluc¸˜ao do Exerc´ıcio 3
Verificar Figura 3 e Tabelas 10, 11 e 12
C´odigo 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 instruc¸˜ao SLT, se o primeiro registrador for menor que o se-
gundo registrador, ent˜ao o terceiro registrador recebe o valor 1. Se fizermos a seguinte
comparac¸˜ao, vamos descobri que maior ´e igual a 0 e menor ´e 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 ´e a instruc¸˜ao BNE que realiza o desvio quando a desigualdade
entre dois valores ´e verdadeira!
2.4. Resoluc¸˜ao do Exerc´ıcio 4
Verificar Figura 4 e Tabelas 13, 14 e 15
C´odigo 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 instruc¸˜ao SLT, se o primeiro registrador for menor que o se-
gundo registrador, ent˜ao o terceiro registrador recebe o valor 1. Se fizermos a seguinte
comparac¸˜ao, vamos descobri que maior ´e igual a 0 e menor ´e 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 ´e a instruc¸˜ao BEQ que realiza o desvio quando a igualdade entre
dois valores ´e verdadeira!
3. Artigo 10: Operac¸˜oes L´ogicas
Verificar Figura 5 e Tabelas 16, 17 e 18.
4. Artigo 11: Operac¸˜ao AND
Verificar Figura 6 e Tabelas 19, 20 e 21.
5. Artigo 12: Operac¸˜ao OR
Verificar Figura 7 e Tabelas 22, 23 e 24.
6. Artigo 13: Operac¸˜ao 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´aquina
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)