Asignacion de Cache por Asociacion por Conjuntos


/ Published in: C++
Save to your folder(s)

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


Copy this code and paste it in your HTML
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <iostream.h>
  5. #include <math.h>
  6. #include <ctype.h>
  7.  
  8.  
  9. int binarioaentero(int nbinario[]);
  10. void enteroabinario(int decimal,int ver);
  11. int cacheasignado(int decimal);
  12.  
  13. int main()
  14. {
  15.  
  16. int nbinario[8],decimal;
  17. char letra;
  18. int aciertofallo[8],ubica,j;
  19. for(j=0;j<8;j++){
  20. aciertofallo[j]=0;
  21. }
  22.  
  23.  
  24. printf("Proyecto de Arquitectura y Organizacion de Computadores\nMaximiliano Cáceres B. 3ºnivel Paralelo 1\n");
  25.  
  26. do{
  27.  
  28. printf("\nDigite un numero binario de 8bits:");
  29. scanf("%d",&nbinario);
  30.  
  31. decimal=binarioaentero(nbinario);
  32.  
  33.  
  34.  
  35. printf("Dir. Ref. Decimal\t");
  36. printf("Dir. Ref. Binaria\t");
  37. printf("A o F Cache\t");
  38. printf("Bl. de C. Asig.\n");
  39. printf("\t%i\t\t",decimal);
  40. enteroabinario(decimal,0);
  41. printf("\t\t\t\t");
  42.  
  43. ubica=0;
  44. char af='F';
  45.  
  46.  
  47.  
  48.  
  49. for(j=3;j<32;j+=4){
  50.  
  51. if(decimal==aciertofallo[ubica]){
  52. af='A';
  53. } else{
  54.  
  55. if((decimal<=j)&&(decimal>=j-3))
  56.  
  57. aciertofallo[ubica]=decimal;
  58. }
  59. ubica++;
  60. }
  61.  
  62. printf("%c\t",af);
  63. enteroabinario(cacheasignado(decimal),0);
  64. printf("\n\n");
  65. printf("Indice\t\t");
  66. printf("V\t\t");
  67. printf("Etiqueta\t\t");
  68. printf("Datos\n");
  69. enteroabinario(cacheasignado(decimal),0);
  70. printf("\t\tY");
  71. printf("\t\t");
  72. enteroabinario(decimal,1);
  73. printf("\t\t\t");
  74. enteroabinario(decimal,2);
  75.  
  76.  
  77. printf("\nDesea continuar s=salir y otro tecla para continuar : ");
  78. fflush (stdin);
  79. letra=getchar();
  80. letra=toupper(letra);
  81. }while (letra!='S');
  82.  
  83.  
  84. return 0;
  85.  
  86. }
  87.  
  88.  
  89. int binarioaentero(int nbinario[]){
  90.  
  91. int i=0;
  92. int dec=0;
  93. int p=0,ia,auxia=2;
  94. int binario=*nbinario;
  95.  
  96. while(binario>0){
  97.  
  98. i=binario%10;
  99.  
  100. ia=i;
  101.  
  102. /* Codigo Ensamblador */
  103.  
  104. asm {
  105. push ax; push cx;
  106. mov cx,ia
  107. mov ax,0h }
  108. mult: asm {
  109. add ax,auxia
  110. loop mult
  111. mov ia,ax
  112. pop cx; pop ax;
  113. }
  114.  
  115. /* Codigo Ensamblador*/
  116.  
  117.  
  118.  
  119.  
  120. dec+=i*(int)pow(ia,p++);
  121. binario /=10;
  122.  
  123. }
  124. return dec;
  125. }
  126.  
  127. void enteroabinario(int decimal,int ver){
  128.  
  129. int i,binario[5];
  130.  
  131. for(i=0;i<5;i++){
  132. binario[i]=0;
  133. }
  134. int lleva,cont=5;
  135. while(decimal!=0){
  136. lleva=decimal%2;
  137. //printf("%d",lleva);
  138. cont--;
  139. binario[cont]=lleva;
  140. decimal=decimal/2;
  141.  
  142.  
  143. }
  144.  
  145.  
  146. switch(ver){
  147. case 0:
  148. for(i=0;i<5;i++)
  149. printf("%d",binario[i]);
  150. break;
  151. case 1:
  152. for(i=0;i<2;i++)
  153. printf("%d",binario[i]);
  154. break;
  155. case 2:
  156. for(i=2;i<5;i++)
  157. printf("%d",binario[i]);
  158. break;
  159.  
  160. }
  161.  
  162.  
  163.  
  164. }
  165.  
  166. int cacheasignado(int decimal){
  167.  
  168. int i,cont=0,auxcont=1,asignado=0;
  169. for(i=3;i<32;i+=4){
  170.  
  171. if(decimal<=i){
  172. asignado=cont;
  173. i=33;
  174. }
  175. /*
  176.   Codigo Ensamblador
  177. */
  178. asm {
  179. push ax;
  180. push cx;
  181. mov cx,cont
  182. mov ax,auxcont
  183. add ax,cx
  184. mov cont,ax;
  185. pop cx;
  186. pop ax;
  187. }
  188. /*
  189.   Codigo Ensamblador
  190.   */
  191.  
  192. }
  193. return asignado;
  194.  
  195. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.