Claro que existe algo "nuevo" y es que me estoy interiorizando mas con el AT&T y sus sintaxis extendida,
la función en si misma ésta bastante optimizada y es más rapida.
/*--------------------------------------------
Autor: NvK
Descripción: Obtiene los últimos caracteres de una cadena de texto y lo pone en un buffer.
Fecha: 25-2-2014
----------------------------------------------*/
void strlast(char *str, int last_n, char output_buf[])
{
volatile register int __ptr_length __asm__("ebx");
register int __ptr_last_n __asm__("ecx");
__asm__(
"mov %%eax, (%%esp);"
"call _strlen;"
"movl %%eax, %%ebx;"
::"a"(str)
);
__asm__("mov %%edx, %%ecx;"
"sub %%ebx, %%ecx;"
"neg %%ecx;" :: "d"(last_n) );
for(int i=0; i<=last_n; i++)
__asm__ volatile(";":"=r"(output_buf[i]):"a"(str[ __ptr_last_n++ ]));
}
Aquí un ejemplo:
char palabra[256];
strlast("ultima letra", 5, palabra);
Salida:
letra