Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Ejercicio 3.1 del libro Lenguaje Ensamblador de Anaya con sintaxis AT&T
- //Antonio Villanueva Segura
- #include <iostream>
- using namespace std;
- int main(){
- struct Incidencia{
- char Carretera[8];
- short Kilometro;
- char Descripcion[128];
- };
- Incidencia hoy[]={
- {"A44",32,"Nieve"},
- {"A6",173,"Accidente"},
- {"M30",8,"Retenciones"}
- };
- int size=sizeof (Incidencia);
- char *via,*problema;
- int kilometro(0);
- int linea(0);
- for (linea;linea<3;linea++){
- asm (
- /* OJO con los registros r = 64bits e= 32bits p.e rax en 64 y eax para 32 bits !!!!!!*/
- "imul %[linea],%[size] \n\t"/*selecciona la linea de la estructura */
- "mov %[size],%%esi \n\t "/* %rsi tiene tamano de la struct incidencia */
- "lea (%[hoy]),%%ebx \n\t" /* direccion de hoy en rbx o ebx */
- /*recupero el puntero a carretera */
- "lea (%%ebx,%%esi,),%%eax \n\t" /*load effective address de %%rbx+%%rsi en %%rax o eax*/
- "mov %%eax,%[via] \n\t"
- /*recupero el valor del kilometro */
- "mov 8(%%ebx,%%esi,),%%ax \n\t"
- "and $255 ,%%eax\n\t"/* solo utilizo los dos bytes inferiores 0xFF*/
- "mov %%eax,%[km] \n\t"
- /*recupero el puntero al problema */
- "lea 10(%%ebx,%%esi,),%%eax \n\t" /*load effective address de %%rbx+%%rsi en %%rax*/
- "mov %%eax,%[problema] \n\t"
- /*asignacion de registros entrada ,salida */
- :[km]"=g" (kilometro) ,[via]"=r" (via),[problema]"=r" (problema) /* %0 kilometro %1 via %2 problema *salidas*/
- :[hoy]"r"(hoy) ,[size]"r" (size),[linea]"r" (linea) /* %3=hoy %4=size entradas*/
- );
- cout <<"Problema "<<problema<<" a la altura del km "<<kilometro<<" en la "<<via<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement