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.