Return to Snippet

Revision: 10259
at December 14, 2008 18:18 by bedomax


Updated Code
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
#include <math.h>
#include <ctype.h>


int binarioaentero(int nbinario[]);
void enteroabinario(int decimal,int ver);
int cacheasignado(int decimal);

int main()
{

  int nbinario[8],decimal;
  char letra;
  int aciertofallo[8],ubica,j;
  for(j=0;j<8;j++){
         aciertofallo[j]=0;
       }


  printf("Proyecto de Arquitectura y Organizacion de Computadores\nMaximiliano Cáceres B.  3ºnivel Paralelo 1\n");

  do{

  printf("\nDigite un numero binario de 8bits:");
  scanf("%d",&nbinario);

  decimal=binarioaentero(nbinario);
 


  printf("Dir. Ref. Decimal\t");
  printf("Dir. Ref. Binaria\t");
  printf("A o F Cache\t");
  printf("Bl. de C. Asig.\n");
  printf("\t%i\t\t",decimal);
  enteroabinario(decimal,0);
  printf("\t\t\t\t");

  ubica=0;
  char af='F';

   

       
	for(j=3;j<32;j+=4){

		 if(decimal==aciertofallo[ubica]){
			af='A';
		 } else{

                 if((decimal<=j)&&(decimal>=j-3))

                     aciertofallo[ubica]=decimal;
		 }
          ubica++;
        }

  printf("%c\t",af);
  enteroabinario(cacheasignado(decimal),0);
  printf("\n\n");
  printf("Indice\t\t");
  printf("V\t\t");
  printf("Etiqueta\t\t");
  printf("Datos\n");
  enteroabinario(cacheasignado(decimal),0);
  printf("\t\tY");
  printf("\t\t");
  enteroabinario(decimal,1);
  printf("\t\t\t");
  enteroabinario(decimal,2);


  printf("\nDesea continuar s=salir y otro tecla para continuar : ");
  fflush (stdin);
  letra=getchar();
  letra=toupper(letra);
  }while (letra!='S');


  return 0;

}


int binarioaentero(int nbinario[]){

  int i=0;
  int dec=0;
  int p=0,ia,auxia=2;
  int binario=*nbinario;

  while(binario>0){

  i=binario%10;

  ia=i;

  /* Codigo Ensamblador */

  asm {
        push ax; push cx;
        mov  cx,ia
        mov  ax,0h }
    mult: asm {
        add  ax,auxia
        loop mult
        mov  ia,ax
        pop  cx; pop ax;
	}

  /* Codigo Ensamblador*/




  dec+=i*(int)pow(ia,p++);
  binario /=10;

  }
  return dec;
}

void enteroabinario(int decimal,int ver){

   int i,binario[5];

   for(i=0;i<5;i++){
   	binario[i]=0;
   }
   int lleva,cont=5;
   while(decimal!=0){
	lleva=decimal%2;
        //printf("%d",lleva);
        cont--;
	binario[cont]=lleva;
        decimal=decimal/2;
	

   }


   switch(ver){
	case 0:
	  for(i=0;i<5;i++)
	  printf("%d",binario[i]);
	break;
	case 1:
	  for(i=0;i<2;i++)
   	  printf("%d",binario[i]);
	break;
	case 2:
	   for(i=2;i<5;i++)
   	   printf("%d",binario[i]);
        break;

   }

   
  
}

int cacheasignado(int decimal){

	int i,cont=0,auxcont=1,asignado=0;
	for(i=3;i<32;i+=4){

		 if(decimal<=i){
			asignado=cont;
                        i=33;
		 }
	/*
        Codigo Ensamblador
	*/
	asm {
	push ax;
	push cx;
        mov  cx,cont
	mov  ax,auxcont
	add ax,cx
	mov cont,ax;
	pop cx;
	pop ax;
	}
	/*
        Codigo Ensamblador
        */
        	
	}
        return asignado;

}

Revision: 10258
at December 14, 2008 17:54 by bedomax


Updated Code
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
#include <math.h>
#include <ctype.h>


int binarioaentero(int nbinario[]);
void enteroabinario(int decimal,int ver);
int cacheasignado(int decimal);

int main()
{

  int nbinario[8],decimal;
  char letra;
  int aciertofallo[8],ubica,j;
  for(j=0;j<8;j++){
         aciertofallo[j]=0;
       }

  do{

  printf("\nDigite un numero binario de 8bits:");
  scanf("%d",&nbinario);

  decimal=binarioaentero(nbinario);
 


  printf("Dir. Ref. Decimal\t");
  printf("Dir. Ref. Binaria\t");
  printf("A o F Cache\t");
  printf("Bl. de C. Asig.\n");
  printf("\t%i\t\t",decimal);
  enteroabinario(decimal,0);
  printf("\t\t\t\t");

  ubica=0;
  char af='F';

   

       
	for(j=3;j<32;j+=4){

		 if(decimal==aciertofallo[ubica]){
			af='A';
		 } else{

                 if((decimal<=j)&&(decimal>=j-3))

                     aciertofallo[ubica]=decimal;
		 }
          ubica++;
        }

  printf("%c\t",af);
  enteroabinario(cacheasignado(decimal),0);
  printf("\n\n");
  printf("Indice\t\t");
  printf("V\t\t");
  printf("Etiqueta\t\t");
  printf("Datos\n");
  enteroabinario(cacheasignado(decimal),0);
  printf("\t\tY");
  printf("\t\t");
  enteroabinario(decimal,1);
  printf("\t\t\t");
  enteroabinario(decimal,2);


  printf("\nDesea continuar s=salir y otro tecla para continuar : ");
  fflush (stdin);
  letra=getchar();
  letra=toupper(letra);
  }while (letra!='S');


  return 0;

}


int binarioaentero(int nbinario[]){

  int i=0;
  int dec=0;
  int p=0,ia,auxia=2;
  int binario=*nbinario;

  while(binario>0){

  i=binario%10;

  ia=i;

  /* Codigo Ensamblador */

  asm {
        push ax; push cx;
        mov  cx,ia
        mov  ax,0h }
    mult: asm {
        add  ax,auxia
        loop mult
        mov  ia,ax
        pop  cx; pop ax;
	}

  /* Codigo Ensamblador*/




  dec+=i*(int)pow(ia,p++);
  binario /=10;

  }
  return dec;
}

void enteroabinario(int decimal,int ver){

   int i,binario[5];

   for(i=0;i<5;i++){
   	binario[i]=0;
   }
   int lleva,cont=5;
   while(decimal!=0){
	lleva=decimal%2;
        //printf("%d",lleva);
        cont--;
	binario[cont]=lleva;
        decimal=decimal/2;
	

   }


   switch(ver){
	case 0:
	  for(i=0;i<5;i++)
	  printf("%d",binario[i]);
	break;
	case 1:
	  for(i=0;i<2;i++)
   	  printf("%d",binario[i]);
	break;
	case 2:
	   for(i=2;i<5;i++)
   	   printf("%d",binario[i]);
        break;

   }

   
  
}

int cacheasignado(int decimal){

	int i,cont=0,auxcont=1,asignado=0;
	for(i=3;i<32;i+=4){

		 if(decimal<=i){
			asignado=cont;
                        i=33;
		 }
	/*
        Codigo Ensamblador
	*/
	asm {
	push ax;
	push cx;
        mov  cx,cont
	mov  ax,auxcont
	add ax,cx
	mov cont,ax;
	pop cx;
	pop ax;
	}
	/*
        Codigo Ensamblador
        */
        	
	}
        return asignado;

}

Revision: 10257
at December 14, 2008 17:27 by bedomax


Initial Code
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
#include <math.h>
#include <ctype.h>


int binarioaentero(int nbinario[]);
void enteroabinario(int decimal,int ver);
int cacheasignado(int decimal);

int main()
{

  int nbinario[8],decimal;
  char letra;

  do{

  printf("\nDigite un numero binario de 8bits:|\n ");
  scanf("%d",&nbinario);

  decimal=binarioaentero(nbinario);
 


  printf("Dir. Ref. Decimal\t");
  printf("Dir. Ref. Binaria\t");
  printf("A o F Cache\t");
  printf("Bl. de C. Asig.\n");
  printf("\t%i\t\t",decimal);
  enteroabinario(decimal,0);
  printf("\t\t\t\t");

  int aciertofallo[4],ubica=0,j;
  char af='F';

       for(j=0;j<4;j++){
         aciertofallo[j]=0;
       }

	for(j=3;j<32;j+=4){

		 if(decimal==aciertofallo[ubica]){
			af='A';
		 } else{
                     aciertofallo[ubica]=decimal;
		 }
          ubica++;
        }

  printf("%c\t",af);
  enteroabinario(cacheasignado(decimal),0);
  printf("\n\n");
  printf("Indice\t\t");
  printf("V\t\t");
  printf("Etiqueta\t\t");
  printf("Datos\n");
  enteroabinario(cacheasignado(decimal),0);
  printf("\t\tY");
  printf("\t\t");
  enteroabinario(decimal,1);
  printf("\t\t\t");
  enteroabinario(decimal,2);


  printf("\nDesea continuar s=salir y otro tecla para continuar : ");
  fflush (stdin);
  letra=getchar();
  letra=toupper(letra);
  }while (letra!='S');


  return 0;

}


int binarioaentero(int nbinario[]){

  int i=0;
  int dec=0;
  int p=0,ia,auxia=2;
  int binario=*nbinario;

  while(binario>0){

  i=binario%10;

  ia=i;

  /* Codigo Ensamblador */

  asm {
        push ax; push cx;
        mov  cx,ia
        mov  ax,0h }
    mult: asm {
        add  ax,auxia
        loop mult
        mov  ia,ax
        pop  cx; pop ax;
	}

  /* Codigo Ensamblador*/




  dec+=i*(int)pow(ia,p++);
  binario /=10;

  }
  return dec;
}

void enteroabinario(int decimal,int ver){

   int i,binario[5];

   for(i=0;i<5;i++){
   	binario[i]=0;
   }
   int lleva,cont=5;
   while(decimal!=0){
	lleva=decimal%2;
        //printf("%d",lleva);
        cont--;
	binario[cont]=lleva;
        decimal=decimal/2;
	

   }


   switch(ver){
	case 0:
	  for(i=0;i<5;i++)
	  printf("%d",binario[i]);
	break;
	case 1:
	  for(i=0;i<2;i++)
   	  printf("%d",binario[i]);
	break;
	case 2:
	   for(i=2;i<5;i++)
   	   printf("%d",binario[i]);
        break;

   }

   
  
}

int cacheasignado(int decimal){

	int i,cont=0,auxcont=1,asignado=0;
	for(i=3;i<32;i+=4){

		 if(decimal<=i){
			asignado=cont;
                        i=33;
		 }
	/*
        Codigo Ensamblador
	*/
	asm {
	push ax;
	push cx;
        mov  cx,cont
	mov  ax,auxcont
	add ax,cx
	mov cont,ax;
	pop cx;
	pop ax;
	}
	/*
        Codigo Ensamblador
        */
        	
	}
        return asignado;

}

Initial URL


Initial Description
Código para proyecto de Arquitectura y Organización de Computadores con C++ y lenguaje ensamblador.

Initial Title
Asignacion de Cache por Asociacion  por Conjuntos

Initial Tags
c

Initial Language
C++