Segunda Experiencia. Laboratorio de Estructuras de Computadores

Anuncio
Segunda Experiencia. Laboratorio de Estructuras de Computadores
02/2001
Compilación de programas y simulación assembler.
La instalación del compilador lcc debe quedar en C.\Program Files\lcc\4.1\bin
En una carpeta de fuentes de usuario se escribe el programa en C que se desea compilar y
se obtiene una versión assembler mips con el comando:
c:\progra~1\lcc\4.1\bin\lcc -S -Wf-target=mips/ultrix nombre.c
Las explicaciones de los argumentos se encuentra en lcc.pdf
Se adjunta un programa cc.bat, que ubicado en la carpeta con los archivos fuentes del
usuario, permite la compilación, desde una ventana DOS, con: cc nombre.c.
Lo cual genera un archivo con extensión asm. Una explicación detallada de las pseudo
instrucciones generadas se encuentra en Aplicaciones, Manual de Programación Assembler.
Vol II. (Cap. 7 Linkage Conventions), en este capítulo se ilustran ejemplos de subrutinas en
C y assembler.
a) Compilar el siguiente programa escrito en C, que ilustra declaraciones de datos,
comparando las zonas de datos y los códigos para las instrucciones con el texto assembler
mips generado.
Simular el programa assembler. Visualizando el estado de la variables.
int i1=0,i2=1,i3=2;
int arr[5]={0,1,2,3,4};
char ch='A';
int brr[]= {3,2,1,0};
char *p = "hola";
int main(void)
{
int j1,j2;
return(0);
}
Visualizar que si se ejecuta el siguiente comando:
c:\progra~1\lcc\4.1\bin\lcc -S -Wf-target=x86/win32 eja.c
Se obtiene un listado assembler para ser ejecutado en procesadores de la familia 8086.
b) El siguiente programa calcula el producto escalar de dos vectores. Comprobar esto
compilando y ejecutando el programa en Windows.
#include <stdio.h>
int ip(int *x, int *y, int n)
{
int i,sum;
for(i=0,sum=0; i<n; i++,x++,y++) sum += (*x)*(*y);
return sum;
}
int main(void)
{
Laboratorio de Estructuras de Computadores.
Lab02
01-08-2001
1
int x[] = {2,4,3,5,1};
int y[] = {3,3,2,5,4};
int n = 5;
printf("%d El producto escalar es: \n" ,ip(x,y,n));
return(0);
}
Quitar la primera línea con el include y ensamblarlo en MIPS. Luego agregar la rutina para
printf que se ilustra a continuación y simular en SPIM. También es preciso agregar el String
con el texto: El producto escalar es:.
Debe cuidarse el paso de parámetros entre el programa y la rutina, así como la ubicación
del código y el String dentro del archivo.
#**********************************************************#
#
printf("$a0 %d",$a1);
#**********************************************************#
#imprime mensaje apuntado por $a0, seguido de numero decimal en $a1
printf:
addiu $sp, $sp,-12
sw
$ra, 0($sp)
#crea espacio del frame de 12 bytes.
#salva dirección de retorno
#debug para ver argumento decimal de printd en stack
sw
$a0, 4($sp)
#salva arg
sw
$a1, 8($sp)
#salva a1 en frame
li
$v0, 4
syscall
move $a0, $a1
li
$v0, 1
syscall
lw
$ra, 0($sp)
addiu $sp, $sp, 12
jr
$ra
Laboratorio de Estructuras de Computadores.
#imprime string en $a0
#macro
#imprime decimal en $a0
#y retorna.
Lab02
01-08-2001
2
Descargar