En esta sección intento adjuntar algunos cometarios que considero importantes.
Probablemente si ven código fuente que usa ensamblado en línea como Linux o
Routix
(por qué no ?) encuentren entre
instrucción e instrucción un modificador '\n' o '\t'. Estos no son más que los famosos modificadores de formato utilizados en C.
El caracter '\t' tabula 8 espacios mientras que '\n' avanza hacia una nueva linea. Que función cumplen aquí ?
Sencillamente ayudan a generar un código más claro.
Pueden hacer la prueba de compilar
__asm__ ("movl %0, %%cr3;nop" : : "r" (puerto) );
o bien
__asm__ ("movl %0, %%cr3\n\tnop" : : "r" (puerto) );
háganlo y comparen los resultados.
En muchos casos pueden haber encontrado luego de un __asm__ al modificador __volatile__ . Este tiene por objeto decirle al Gcc que sea cual fuera el modo de compilación no debe alterar el código escrito por ustedes en el inline assembly. Si no lo hacen, y sólo escriben un __asm__ el Gcc intentará optimizar todo el código con el fin de lograr mayor eficiencia, lo cuál puede llegar a ir contra nuestras intenciones. Miren un poco el código fuente de Linux para ver que tanto Linus Torvalds utilizó a ese modificador.