Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2022
    Messaggi
    2

    [assembly x86] ricerca occorrenza in stringa

    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.

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Dando una rapida lettura mi viene da dire che intanto xor reg,reg azzera il registro cosa che nel tuo codice viene eseguito anche cn un mov. Presi singolarmente andrebbero bene ma in sequenza fanno numero e accodano errori. Riduci le lunghezze 2 volte. Tocca riordinare un po i diversi jumps che fanno rabbrividire anche le ottimizzazioni del gcc. Il flusso oltre ad essere molto contorto veramente dubito ti trovi qualcosa. Ripetoho letto molto velocemente
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2022
    Messaggi
    2
    Moderatori ho risolto il problema potreste togliere il post, grazie.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.