[assembly x86] ricerca occorrenza in stringa

di il
2 risposte

[assembly x86] ricerca occorrenza in stringa

Ho iniziato da poco assembly e mi serve aiuto,
questo programma deve cercare tutte le occorrenze della stringa 2 nella stringa 1.
Il programma funziona con tutte le stringhe tranne che con
"Ciao Cia Cio Ociao ciao Ocio CiCiao CieCiaCiu CiAo eeCCia"
"Cia"
Il risultato corretto sarebbe: 0 5 31 39 54
invece a me stampa: 0 5 39
Non capisco perché, il funzionamento mi sembra lo stesso 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.

2 Risposte

  • Re: [assembly x86] ricerca occorrenza in stringa

    Inserisci il codice nel forum tra tag code

    La stringa all'inizio parte con Ciao quindi è giusto che trovi Cia
    Spiega meglio il problema
  • Re: [assembly x86] ricerca occorrenza in stringa

    Modificato, grazie.
    Comunque il programma deve trovare tutte le occorrenze della stringa 2 nella stringa 1 per esempio:
    stringa1: "ciao ciao ciak"
    stringa2: "ciao"
    dovrebbe ritornare 0 e 5 che sono le posizioni della prima lettera in cui si trovano le occorrenze.
    In pratica ogni volta che trova la parola "ciao" deve salvare la posizione
Devi accedere o registrarti per scrivere nel forum
2 risposte