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 485: 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 501: 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 511: 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 522: 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.1287932999.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)