Existen muchos casos donde debemos utilizar en nuestro código (en lenguaje C) un poco de assembly debido a que queremos optimizar algunas lineas un poco más "a mano", o sencillamente necesitamos usar instrucciones las cuales no poseen ningún tipo de función o macro asociada en C(por ejemplo LGDT, LTR, IRET, etc).Es en estos casos en los cuales es necesario recurrir al inline assembly (o ensamblado en linea). Esta herramienta que nos brinda el Gcc no sólo es muy útil, si no que después de acostumbrarse a su utilización termina siendo realmente cómoda
Por la simple razón que cuando necesite aprender inline assembly considero me costo más de lo que hubiera querido. No encontre la cantidad de ejemplos que me hubiera gustado, y sentí que esos textos estaban a otro nivel.
Desde ya que con este humilde texto no pretendo brindar más inforción de la queda el manual de Gcc, si no que intentaré ser lo mas claro posible, utilizando ejemplos sencillos, que cualquier novato entendería. Al igual que a varios conocidos que tengo, me costo bastante entender ese típico ejemplo de la multiplicación de números via Inline Assembly que aprovecha la arquitectura super-escalar del microprocesador Pentium. Imaginense, mientras buscaba la palabra clobber en el diccionario, intentaba interpretar porque ese "leal" con todos sus agregados tomaba solo 1 ciclo de máquina. (Para los que no sepan de que estoy hablando, no tienen más que ir a otro how to de inline assembly para entenderme :-). Tengan en cuenta que la información que aqui se brinda es básica es decir, en caso de necesitar algo mas avanzado, deberán recurrir al manual de Stallman.
Para que este documento puede serle útil usted necesitará
Tanto en el manual de GCC como en otros documentos van a encontrar una diferenciación entre el Inline Assembly y lo denominado "Extended" Inline Assembly. El primero es utilizado para insertar código assembly sin que este utilice variables o macros del código escrito en C. En cambio, el "extended" nos brinda la posibilidad de poner en registros, o utilizar en instrucciones del microprocesador valores que se encuentran en variables, o viceversa. Este texto se concentra en el "extended inline assembly" ya que es donde la mayoría de nosotros nos chocamos un poco al comenzar. Vale también aclarar que todos los ejemplos aquí mostrados son aptos sólo para la arquitectura IA32 (386 o superior).
Este documento pertenece a Martin Candurra (astor) . Puede ser copiado o reproducido en forma total o parcial, lo único que pido es que se mantenga el copyright del autor, y que se me informe de la utilización, con el fin de que pueda ver el contexto en el que es usado y la utilidad que le encontraron. (A fin de motivar mi Ego y la escritura de otro How to).