Djgpp Inline Assembler (Traducido por Edmundo López)
Este documento fue escrito originalmente por Jerome St-Louis, la versión original en ingles puede ser encontrada en http://pages.infinit.net/jstlouis/djgpp/djgpp_inline_asm.html
Este tutorial asume que ya conoces la sintaxis clásica de Intel. DJDPP usa el ensamblador entre lineas de AT&T,
que se diferencia mucho de la syntaxis de Intel. Lo principal a tener en cuenta
es lo siguiente:
  - La sintaxis general es:
    asm("instrucciones");
- El orden Destino, Fuente  es
    ahora Fuente, Destino.
- Debes poner un % delante del nombre de
    los registros.
- Delante de las constantes debe ponerse
    un $.
- Los números hexadecimales usan
    sintaxis de C (0x13 en vez de 13h).
- Debes aumentar un sufijo de le un
    sufijo de una letra a cada instrucción para especificar el tipo de datos (b
    para byte, w para word (palabra), l para long).
- asm mov ax, 13h;(en
    sintaxis de Intel) se hace asm("movw $0x13, %ax");
- Cuando se usa instrucciones asm
    con varias lineas, debes aumentar \n\t al final de cada linea, para
    que DJGPP aumente un retorno de carro/alimentación de linea al código .S
    (ensamblador) resultante.
- Nunca olvides hacer push  y
    pop  a cada registro que modifiques
- Para usar variables de C, necesitas la sintaxis extendida de ensamblador
    entre lineas: asm ("Instrucciones":["g="(Campos
    de Salida)]:["g"(Campos de Entrada)]:["Campo Golpeado
    1", ...]);.
- Los campos son representads por %0 a
    %9. Cuando se usan ambos campos de entrada y salida, la salida va usar los
    los primeros números, y la entrada va a continuar la secuencia.
- Cuando se usa la sintaxis extendida
    del ensablador entrelineas, necesitaras poner dos "%" antes
    de los nombres de los registros.
- Ejm: Para poner modo en ax
    : asm("movw %0,%%ax"::"g"(modo));.
- Cuando especificas un registro
    (siempre uno de 16 byte, ax, se preocupara por  ambos ax
    y eax) en el campo golpeado, no necesitaspreocuparte por pushearlos
    y popearlos. También necesitas especificar memoria cunado usas
    cualquiera de los otros campos.
Mira estos ejemplos para hacertelo más fácil
Aumentando do enteros largos(long int) usando Ensablador entrelineas
extendido.-
#include <stdio.h>
#include <conio.h>
void main()
{
   long int Num1=4281093, Num2=100000, Sum;
   asm("movl %1, %%eax\n\t"
       "movl %2, %%ebx\n\t"
       "addl %%ebx, %%eax\n\t"
       "movl %%eax, %0"
       : "g="(Sum)
       : "g"(Num1), "g" (Num2)
       : "ax", "bx", "memory");
   printf("%li+%li=%li\n",Num1,Num2,Sum);
   while(!kbhit());
   getch();
}
Copyright © 1996-1998 Jerome St-Louis
jerstlouis@videotron.ca