Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Ejercicio 3.1 del libro Lengua 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);
- /* Ojo con los registros r = 64bits e= 32bits p.e rax en 64 y eax para 32 bits !!!!!!*/
- asm (
- "mov %[size],%%esi \n\t "/* %rsi tiene tamano de la struct incidencia */
- "lea (%[hoy]),%%rbx \n\t" /* direccion de hoy en rbx */
- /*recupero el puntero a carretera */
- "lea (%%rbx,%%rsi,2),%%rax \n\t" /*load effective address de %%rbx+%%rsi en %%rax*/
- "mov %%rax,%[via] \n\t"
- /*recupero el valor del kilometro */
- "mov 8(%%rbx,%%rsi,2),%%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(%%rbx,%%rsi,2),%%rax \n\t" /*load effective address de %%rbx+%%rsi en %%rax*/
- "mov %%rax,%[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) /* %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