Advertisement
AntonioVillanueva

Ejercicio 3.1 del libro Lengua Ensamblador de Anaya con sint

Jan 26th, 2016
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. //Ejercicio 3.1 del libro Lengua Ensamblador de Anaya con sintaxis AT&T
  2. //Antonio Villanueva Segura
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. int main(){
  7.     struct Incidencia{
  8.         char Carretera[8];
  9.         short Kilometro;
  10.         char Descripcion[128];
  11.     };
  12.    
  13.     Incidencia hoy[]={
  14.         {"A44",32,"Nieve"},
  15.         {"A6",173,"Accidente"},
  16.         {"M30",8,"Retenciones"}                    
  17.     };
  18.     int size=sizeof (Incidencia);
  19.     char *via,*problema;
  20.     int kilometro(0);
  21.      /* Ojo con los registros r = 64bits e= 32bits p.e rax en 64 y eax para 32 bits !!!!!!*/
  22.     asm (
  23.  
  24.         "mov %[size],%%esi \n\t "/* %rsi tiene tamano de la struct incidencia */   
  25.         "lea (%[hoy]),%%rbx \n\t" /* direccion de hoy en rbx */
  26.        
  27.         /*recupero el puntero a carretera */
  28.         "lea (%%rbx,%%rsi,2),%%rax \n\t" /*load effective address de %%rbx+%%rsi en %%rax*/
  29.         "mov %%rax,%[via] \n\t"
  30.         /*recupero el valor del kilometro */
  31.         "mov 8(%%rbx,%%rsi,2),%%ax \n\t"
  32.         "and $255 ,%%eax\n\t"/* solo utilizo los dos bytes inferiores 0xFF*/
  33.         "mov %%eax,%[km] \n\t"
  34.         /*recupero el puntero al problema */
  35.         "lea 10(%%rbx,%%rsi,2),%%rax \n\t" /*load effective address de %%rbx+%%rsi en %%rax*/
  36.         "mov %%rax,%[problema] \n\t"
  37.  
  38.         /*asignacion de registros entrada ,salida */
  39.         :[km]"=g" (kilometro) ,[via]"=r" (via),[problema]"=r" (problema) /* %0 kilometro %1 via %2 problema *salidas*/
  40.         :[hoy]"r"(hoy) ,[size]"r" (size) /* %3=hoy %4=size      entradas*/
  41.         );
  42.    
  43.     cout <<"Problema "<<problema<<" , a la altura del km "<<kilometro<<" en la "<<via<<endl;
  44.    
  45. return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement