Primero: Desconozco qué compilador usas ni qué sintaxis.
En una primera instancia, los ensambladores de alto nivel como
nasm permiten hacer cálculos de tamaño de cadena directamente.
Suponiendo esto en el segmento de datos:
Código Ensamblador:
Ver originalsection .data
texto " aoaisjdoasijdoioasijdoaijoianodisndoi2jogikogikoik",'$'
%strlen textolength texto
En base a eso, la dirección última sería
ds:[1000+textolength]
Código Ensamblador:
Ver originalscan:
.loop:
mov ecx, texto+ebx
add ebx, 0x01
cmp ecx, 0x20 ; espacio
je balancer.loop
cmp ecx, eax
je scan.loop
balancer:
.loop
La idea es dos labels, uno para hacer el escaneo y otro para el balanceo....
Desarrolla la idea.