.text
.arm
.global _start
_start:
        b reset
        b loop
        b loop
        b loop
        b loop
        nop
        b loop
        b loop

/* ==============================
*  CODIGO
*  ==============================
*/
reset:
        mov r1,#VECT   @ vector origen 
        mov r2,#VEC1   @ vector de byte destino con las letras 
        mov r3,#VEC2   @ vector de halfword destino con las cantidades de cada letra
        mov r6,#0      @ ultima letra guardada (inicia con 0 para que la comparacion sea negativa y entre a agregar)
        mov r7,#1      @ contador de letras repetidas (inicia con 1 sin embargo la primera pasada si o si entra a agregar 
                       @ donde se vuelve a inicializar con 1, esta linea entonces no es necesaria)  

otro1:  ldrb r5,[r1],#1 @ lee la letra de destino 
        cmp r5,#0       @ si es 0 llego a fin de cadena y sale
        beq final  
        cmp r5,r6       @ comparar con la ultima letra guardada ( la primera pasada r6 es 0 entonces esta comp da diferente si o si)
        bne agregar     @ si son distintas voy a agregar
        add r7,r7,#1    @ si las letras eran iguales incremento r7 y lo guardo en r3 - 2 
        strh r7,[r3,#-2] 
continuar:
        b otro1
/* ==========================================================================
* agregar: agrega una nueva entrada a los dos vectores destino, guardando en 
* VEC1 la letra leida y en VEC2 inicializando con 1 
* si bien se plantea como funcion, no lo es, la devolucion de una función se 
* debe realizar utilizando el lr no con una instruccion b.
* esta funcion guarda la letra e inicializa con 1 el vector VECT2 con una 
* instruccion de postincremento, esto significa que cuando se quiera acceder a 
* la cuenta de la ultima letra guardada, se debe restar 2 al valor de r3 
* ==========================================================================*/ 
agregar:
        mov r7,#1
        strb r5,[r2],#1 @ guarda la ultima letra leida
        strh r7,[r3],#2 @ inicializa cuenta con 1 
        mov r6,r5       @ actualiza r6 con la nueva letra
        b continuar
final:
loop:   b loop

/* ==============================
*  CONTANTES
*  ==============================
*/
VECT:	.asciz "fssddgggrrteeeeeeeew"
VEC1: .space(21)
VEC2: .space(21)
        .end

