Muestra las diferencias entre dos versiones de la página.
| 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 ==== | ||