Parece un problema cachirulo;
en resumen si tengo la siguiete cadena:
cadena db 'la cadena mas corta y nada mas',0
deberia quedar asi:
cadena db 'la y mas corta cadena nada mas',0
¿cierto?
1º debo reconocer las palabras(estas estan separadas por espacios[ ] con el valor de 32 en Ascii)
2º encontrar de alguna forma la palabra mas corta y la mas larga, o lo mismo ubicar sus posiciones dentro la cadena(puedo dejar un puntero en la palabra mas corta y otro en la mas larga).
3º(manejar bien los punteros) copio la cadena en otra, hasta "llegar" a la palabra(sea la corata o la larga), copio su opuesta(si estamos sobra la mas larga copio la mas corta y viseverza), a continuacion copio el resto de la cadena hasta llegar a la otra palabra y rescion copio su opuesta y por ultimo copio el resto.
para la primera parte podria ser asi:
;;Busqueda de la palabra mas larga
;;DI se queda apuntando a la palabra mas larga
mov si,offset cadena
mov conta0,0
mov conta1,0
c1: mov al,[si]
cmp al,0
jz NEXT1
cmp al.32;;' ' espacio
jz c0
jmp n0
c0: mov al, conta1 ;contador que identifica la palabra mas larga
cmp al,conta0 ;contador anterior
jb ct0 ;si es menor
mov di,si
mov conta0,al
ct0: inc si
mov conta1,0 ;;reiniciamos contador
jmp c1 ;;incrementa SI hasta pasar los espacios
n0: inc conta1
inc si ;; siguiente caracter
NEXT1:
.
.
.
cadena db 'la cadena mas corta y nada mas',0
conta1 db 0
conta0 db 0
no revise el codigo y de seguro que tiene errores,pero lo importante es la idea.