Advertisement
AntonioVillanueva

Test assembler

Jan 13th, 2016
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. //asm(".intel_syntax noprefix");
  4. //asm(".att_syntax prefix");
  5.  
  6. /*usa assembler extend con inclusion explicita de la instruccion imul*/
  7. int funcion(){
  8. int no = 100, val ;
  9.     asm ("movl %1, %%ebx;"
  10.          "movl %%ebx, %0;"
  11.          : "=r" ( val )        /* output */
  12.          : "r" ( no )         /* input */
  13.          : "%ebx"         /* clobbered register */
  14.      );    
  15. return val;
  16. }
  17.  
  18.  
  19. int foo()
  20. {
  21.     int output(0);
  22.     int some_obscure_name (5); // "param" will be accessible in inline Assembly.   
  23.    asm( "mov %0, %%eax "
  24.          :  "=r"(output)     /* output */
  25.          :  "r" (some_obscure_name)/* input */
  26.          : /* clobbered register */
  27.     );
  28.          return output;
  29. }
  30.  
  31.  int foo2(int entrada)
  32. {
  33.     int output(0); 
  34.    asm( "mov %0, %%eax "
  35.          :  "=r"(output)     /* output */
  36.          :  "r" (entrada)/* input */
  37.          : /* clobbered register */
  38.     );
  39.          return output;
  40. }
  41.  
  42.  int foo3()
  43. {
  44. //at&t memonico fuente,destino
  45.     struct pto{int x;int y;};
  46.     pto punto {7,5};
  47.        
  48.     //int output(0);   
  49.     pto output {0,0};
  50.    asm(
  51.         "mov %0, %%eax ;"//struct punto-> eax , eax contiene la structura
  52.         "mov %%eax, %1 ;"//eax->output
  53.          :  "=r"(output)     /* %1 output */
  54.          :  "r" (punto)     /* %0 input */
  55.          : /* clobbered register */
  56.     );
  57.          return output.x;
  58. }
  59.  
  60. int main(){
  61.  
  62.     cout <<" salida "<<funcion()<<endl;
  63.     cout <<" salida "<<foo()<<endl;  
  64.     cout <<" salida "<<foo2(69)<<endl;
  65.     cout <<" salida "<<foo3()<<endl;    
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement