Professional Documents
Culture Documents
15 de janeiro de 2016
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
int i , j ;
.data
.word 1
.word 1
# r e a de dados
# a l o c a e s p a o para v a r 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
# r e a de c 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 ) similar lb mas 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. Veja o tutorial ao Mars para a lista das diretivas que este prov.
As diretivas aceitas pelo montador do Mars no so as mesmas providas pelo mips-as.
Programa 2: strcpy.c
char f t e [ 1 6 ] = " abcde f g h i j k l " ;
char d s t [ 1 6 ] = { \0 } ;
// i n i c i a l i z a com \ 0
v o i d main ( v o i d ) {
int i , f , n ;
i =1;
// i n c l u i \ 0 na contagem
// c o p i a e computa tamanho da c a d e i a , i n c l u s i v e \ 0
w h i l e ( ( d s t [ i ] = f t e [ i ] ) != \0 ) // a t r i b u i e e n t o compara
i ++;
d s t [ i ] = \0 ;
// sua v e r s o assembly de p r i n t f ( ) deve t e r um
// nmero f i x o de argumentos
p r i n t f ( " f o n t e : %s \n " , f t e ) ;
p r i n t f ( " d e s t : %s \n " , d s t ) ;
p r i n t f ( " tam : %d \n " , i ) ;
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.
Programa 3: Duas verses do fatorial iterativo
v o i d main ( v o i d ) {
int i , f , n ;
n =5;
i=f =1;
do {
f = f i;
i = i + 1;
} w h i l e ( i <= n ) ;
p r i n t f ( "%d%d\n " , n , f ) ;
f =1;
i=n ;
while ( i > 0) {
f= f i ;
i = i 1;
}
p r i n t f ( "%d%d\n " , n , f ) ;
return ( 0 ) ;
}
Referncias
[RH14] CI064 Software Bsico, Roberto A Hexsel, 2014, http://www.inf.ufpr.br/roberto/
ci064/swbas.pdf
EOF