In questo programma devo cercare tutte le occorrenze della stringa 2 nella stringa 1
il programma funziona con tutte le stringhe che ho provato tranne che con
"Ciao Cia Cio Ociao ciao Ocio CiCiao CieCiaCiu CiAo eeCCia"
"Cia"
In questo caso il risultato corretto sarebbe: 0 5 31 39 54
invece a me stampa 0 5 39
Non capisco perché, in questa stringa mi sembra lo stesso funzionamento di
"Sette scettici sceicchi sciocchi con la sciatica a Shanghai"
"icchi"
con la quale il programma funziona correttamente.
Non riesco a trovare l'errore!!

codice:
#include <stdio.h>


void main()
{
    #define MAX_LEN    100


        // Input
    char s1[] = "Ciao Cia Cio Ociao ciao Ocio CiCiao CieCiaCiu CiAo eeCCia";
    unsigned int lungS1 = sizeof(s1) - 1;
    char s2[] = "Cia";
    unsigned int lungS2 = sizeof(s2) - 1;
    // Output
    unsigned int posizioni[MAX_LEN];
    unsigned int posizioniLen;


    // Blocco assembler
    __asm
    {
        MOV ECX, 0
        MOV EAX, 0
        DEC lungS1
        DEC lungS2
        MOV EBX, lungS1
        CMP EBX, 0
        JZ fine
        MOV posizioniLen, 0
        XOR EBX, EBX
        XOR EDX, EDX




        uno : CMP ECX, lungS1
        JG fine
        CMP EAX, lungS2
        JNG restart
        XOR EAX, EAX


        restart : MOV BH, s1[ECX]
        CMP BH, s2[EAX]
        JE due
        JNE tre


        due : XOR EBX, EBX
        CMP EAX, 0
        JNE duedue
        MOV posizioni[EDX * 4], ECX
        INC ECX
        INC EAX
        JMP uno


        duedue : CMP EAX, lungS2
        JNE duetre
        INC ECX
        INC EDX
        INC posizioniLen
        XOR EAX, EAX
        JMP uno


        duetre : INC EAX
        INC ECX
        JMP uno


        tre : XOR EBX, EBX
        XOR EAX, EAX
        INC ECX
        JMP uno




        fine :
    }


    // Stampa su video
    {
        unsigned int i;
        for (i = 0; i < posizioniLen; i++)
            printf("Sottostringa in posizione=%d\n", posizioni[i]);
    }
}
Vi prego aiutatemi, grazie.