Herramientas de usuario

Herramientas del sitio


highlevel:c:clinux

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
highlevel:c:clinux [2010/10/24 15:09]
alfred
highlevel:c:clinux [2020/05/09 09:25] (actual)
Línea 456: Línea 456:
  
 ===== Otros ===== ===== Otros =====
 +
 +
 +
 +
 +
  
  
Línea 474: Línea 479:
 __asm__ ("movl %0, %%eax" : : "​g"​ (i)); __asm__ ("movl %0, %%eax" : : "​g"​ (i));
 </​code>​ </​code>​
-En este caso ''​%0''​ corresponde al valor de entrada ''​i'';​ el acceso al registro ''​eax''​ se hace mediante ''​%%''​ (esto se ha de hacer para cada registro); lo que el código hace es asignar el valor de ''​i''​ (100) a ''​eax''​. \\ +En este caso ''​%0''​ corresponde al valor de entrada ''​i'';​ el acceso al registro ''​eax''​ se hace mediante ''​<​nowiki>​%%</​nowiki>​''​ (esto se ha de hacer para cada registro); lo que el código hace es asignar el valor de ''​i''​ (100) a ''​eax''​. \\ 
 La directiva ''"​g"​(i)''​ indica al compilador donde almacenar el parámetro. "​r"​ le permitiría guardar la variable en cualquier registro qeu no esté en uso. "​a"​ en ax\eax, "​b"​ en bx\ebx, "​c"​ en cx\ecx, "​d"​ en dx\edx, ​ "​D"​ en di\edi, "​S"​ en si/esi, etc. La directiva ''"​g"​(i)''​ indica al compilador donde almacenar el parámetro. "​r"​ le permitiría guardar la variable en cualquier registro qeu no esté en uso. "​a"​ en ax\eax, "​b"​ en bx\ebx, "​c"​ en cx\ecx, "​d"​ en dx\edx, ​ "​D"​ en di\edi, "​S"​ en si/esi, etc.
 <code c> <code c>
Línea 484: Línea 489:
 </​code>​ </​code>​
 También podemos utilizar la directiva ''​volatile''​ que optimiza el código. ​ También podemos utilizar la directiva ''​volatile''​ que optimiza el código. ​
-<​code>​+<​code ​c>
 int i=0, j=1; int i=0, j=1;
-__asm__ __volatile__("​+__asm__ __volatile__(" ​\
       pushl %%eax \n \       pushl %%eax \n \
       movl %0, %%eax \n \       movl %0, %%eax \n \
Línea 500: Línea 505:
 <code c> <code c>
 int i=0, j=1, k=0; int i=0, j=1, k=0;
-__asm__ __volatile__("​ +__asm__ __volatile__(" ​\ 
-      pushl %%eax\n +      pushl %%eax \n \ 
-      movl %1, %%eax\n +      movl %1, %%eax \n \ 
-      addl %2, %%eax\n +      addl %2, %%eax \n \ 
-      movl %%eax, %0\n+      movl %%eax, %0 \n \
       popl %%eax"       popl %%eax"
       : "​=g"​ (k)       : "​=g"​ (k)
Línea 510: Línea 515:
 ); );
 /* k = i + j; */ /* k = i + j; */
 +</​code>​
 +Si quisieramos decir que después de la llamada al código ensamblador no se toque el ''​ecx''​ haríamos:
 +<code c>
 +__asm__ __volatile__ ("​..."​ : : : "​ecx"​);​
 +</​code>​
 +Podemos insertar etiquetas locales dentro del ensamblador en línea, la llamada a estas debe terminar por una b o una f según si dicha etiqueta esta después o antes de la instrucción de salto:
 +<code c>
 +__asm__ __volatile__("​
 +      0: \n \
 +      ...
 +      jmp 0b \n \
 +      ...
 +      jmp 1f \n \
 +      ...
 +      1:\n \
 +      ..."
 +);
 </​code>​ </​code>​
  
 ===== Herramientas ===== ===== Herramientas =====
 +
 +
  
  
Línea 521: Línea 545:
   * El parámetro ''​-c''​ hace que no salga un ejecutable sino uno con código objeto.   * El parámetro ''​-c''​ hace que no salga un ejecutable sino uno con código objeto.
   * Para realizar el linkage de librerías estáticas (ficheros .lib) en tu proyecto tendrás que utilizar el parámetro ''​-l''​ seguido del nombre de la librería, pero seguido sin espacios; por ejemplo, tenemos la librería ''​ddraw.lib''​ o ''​gdi32.lib''​ haremos ''​-lddraw''​ o ''​-lgdi32''​.   * Para realizar el linkage de librerías estáticas (ficheros .lib) en tu proyecto tendrás que utilizar el parámetro ''​-l''​ seguido del nombre de la librería, pero seguido sin espacios; por ejemplo, tenemos la librería ''​ddraw.lib''​ o ''​gdi32.lib''​ haremos ''​-lddraw''​ o ''​-lgdi32''​.
 +  * El parámetro ''​-I''​ agrega un directorio de cabeceras (archivos .h): ''​-I/​usr/​X11R6/​include/''​
 +  * El parámetro ''​-s''​ saca el archivo en ensamblador del compilado.
   * http://​iie.fing.edu.uy/​~vagonbar/​gcc-make/​gcc.htm   * http://​iie.fing.edu.uy/​~vagonbar/​gcc-make/​gcc.htm
-  * el parámetro ''​-s''​ saca el archivo en ensamblador del compilado. 
  
 ==== Debug ==== ==== Debug ====
highlevel/c/clinux.1287932945.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)