Advertisement
AntonioVillanueva

Ejercicio 3.2 XLAT C++ inline assembler AT&T

Jan 27th, 2016
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. unsigned char dia(unsigned char mes,unsigned char *dias){
  5.     unsigned char salida(0);
  6.     asm(
  7.         "nop \n\t"
  8.         "movl %[dias],%%ebx \n\t" /* recupera la direccion de dias en rbx 64bits o ebx32 bits */
  9.        
  10.         "movb %[mes],%%al \n\t"/* al contiene el mes */
  11.         "xlat \n\t" /*xlat ebx tiene la base y al el desplazamiento */
  12.         "movb %%al,%[salida] \n\t"
  13.        
  14.  
  15.         :[mes]"=r"(mes),[salida]"=d"(salida)
  16.         :[dias]"m"(dias)
  17.         :"%ebx"
  18.         );
  19.    
  20.     return salida;
  21. }
  22.  
  23.  
  24. int main(){
  25.     unsigned char dias[]={31,28,31,30,31,30,31,31,30,31,30,31 };
  26.     enum mes {enero,febrero,marzo,abril,mayo,junio,
  27.         julio,agosto,septiembre,ocubre,noviembre,diciembre};
  28.        
  29.        
  30.     for (unsigned char d=enero ;d<=diciembre;++d){
  31.         cout <<"numero de dias mes "<<(int) d<<" = "<<(int)dia(d,&dias[0])<<endl;
  32.     }
  33.    
  34.     return 0;
  35. }
  36.  
  37. /*Escriba un programa en el que se utilice la instruccion XLAT para recuperar
  38.  * de una tabla el numero de dias que tiene un mes cualquiera.
  39.  * La tabla con los dias se define en C/C++  como un vector de tipo unsigned char,
  40.  * Dejando el resultado de la traduccion en una variable accesible para el resto
  41.  * del programa , a fin de poder imprimir el resultado en pantalla*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement