/ Published in: C++
Código para proyecto de Arquitectura y Organización de Computadores con C++ y lenguaje ensamblador.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#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; }