Revision: 10259
Updated Code
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
Updated Code
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
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
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++