24 de maro de 2014
Objetivos:
So dois os objetivos deste laboratrio: (i) aprender usar o simulador
MARS; e (ii) escrever e testar um programa completo em assembly.
Preparao: Veja MARS_Tutorial.pdf e MARS_features.pdf em
http://www.inf.ufpr.br/roberto/ci210/assembly .
5.1
5.2
Programa 1: fatorial.s
1
2
# v o i d main ( v o i d ) { // f a t o r i a l i t e r a t i v o
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
vi:
vj:
resp:
int i , j ;
.data
.word 1
.word 1
# a r e a de dados
# a l o c a e s p a c o para v a r i a v e i s g l o b a i s
# apenas como e x e m p l o . . .
. a s c i i z " f a t o r i a l de 5 = "
.text
. g l o b l main
# a r e a de c o d i g o
# d e f i n e main como nome g l o b a l
main:
#
j =1;
ad di $t1 , $ z e r o , 1
for:
s l t i $t7 , $t4 , 6
beq $t7 , $ z e r o , f i m f o r
# n < 6
fat (5)
j = ji ;
mult $t1 , $ t 4
mflo $ t 4
ad di $t4 , $t4 , 1
j for
f i m f o r : ad di $v0 , $ z e r o , 4
l a $a0 , r e s p
syscall
ad di $v0 , $ z e r o , 1
addu $a0 , $ z e r o , $ t 1
syscall
#
return ( 0 ) ;
l i $v0 , 10
syscall
# imprime r e s p o s t a
# s y s c a l l ( 4 ) = imprime s t r i n g
# imprime i n t e i r o
# s y s c a l l ( 1 ) = imprime i n t e i r o
# t e r m i n a programa
# s y s c a l l ( 1 0 ) = t e r m i n a programa
# }
5.3
Traduza o Programa 2 para assembly do MIPS e verifique sua corretude com MARS. Use
o cdigo que imprime inteiros em fibonacci.s como modelo para o printf, alterando
o tipo de sada de inteiro para string. Os cdigos das syscalls esto definidos em Help
MIPS Syscalls.
A instruo lb rt , desl ( rs ) carrega o byte apontado por ( extSinal ( desl )+rs) no registrador rt . A instruo lbu rt , desl ( rs ) no estende o sinal do byte carregado. A instruo sb rt , desl ( rs ) armazena o byte menos significativo em rt no endereo apontado por
( extSinal ( desl )+rs).
Para alocar as strings em memria use a linha 8 do Programa 1 como exemplo. A diretiva
.asciiz aloca uma string incluindo o \0, enquanto que .ascii aloca uma string sem
o \0. As diretivas aceitas pelo montador do Mars no so as mesmas providas pelo as.
Veja o tutorial ao Mars para a lista das diretivas que este prov.
Programa 2: strcpy.c
1
2
3
4
5
6
7
8
// i n i c i a l i z a
v e t o r com \ 0
9
10
11
12
13
14
// s u a v e r s a o a s s e m b l y de p r i n t f ( ) d e v e t e r um
// numero f i x o de a r g u m e n t o s
printf ( " fonte : % s \ n " , fte );
printf ( " dest : % s \ n " , dst );
printf ( " tam : % d \ n " , i );
15
16
17
18
return (0);
5.4
Mais do Fatorial
Este exerccio para aqueles que j utilizaram o Mars em outras disciplinas, e que chegaram
a esta tarefa com tempo disponvel. Para aqueles que utilizam Mars pela primeira vez,
este exerccio deve ser tentado fora do horrio de aula.
Traduza o Programa 3 para assembly do MIPS e verifique sua corretude com MARS. Para
este exerccio use os desvios atrasados do MIPS as instrues que seguem os desvios
devem ser instrues teis, ou nops. Para ativar os desvios atrasados ligue o boto Settings
Delayed branching.
Programa 3: Duas verses do fatorial iterativo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
}
printf ( " % d % d \ n " ,n , f );
19
20
21
22
23
return (0);
}
Referncias
[PH05] Organizao e Projeto de Computadores - A Interface Hardware/Software, D A Patterson,
J L Hennessy. 3a Ed, Campus Elsevier.
EOF