Ciao,
Il problema sta essenzialmente nel compare...
Innanzitutto non puoi specifcare due locazioni in memoria ([bx+di],[bp+si]) per il confronto a meno di non usare l'indirizzamento del 386 (col SIB byte)
Inoltre, anche se fosse possibile, dovrai specificare la dimensione dei dati... tra registro e memoria la dimensione è indicata dal registro, ma tra memoria e memoria, l'assemblatore dovrà sapere se vuoi confrontare byte,word o dword...
Terzo, è bene cercare di evitare l'uso di bp negli indirizzamenti per due motivi essenziali:
1) L'uso di bp implica automaticamente l'utilizzo di SS come segmento (per cui sarebbe necessario un segment override)
2) In genere bp dovrebbe essere usato (proprio perché usa implicitamente SS) per lo stack frame e le variabili locali.
Detto questo, un codice può essere il seguente:
lds si,stringa1; //Oppure, se ds punta già al segmento dati basta una lea o un mov si,offset stringa1
lds di,stringa2; //Come sopra
E nel ciclo:
mov cx,4
ciclo:
mov al,[si]
cmp [di],al
jnz diversi
inc si
inc di
loop ciclo
Se vuoi mantenere i puntatori all'inzio della stringa (come facevi usando bx+si e bp+si - ma probabilmente non è necessario), salvali in ax/dx (o qualsiasi altro registro di base) e trasferiscili in si e di prima di far partire il ciclo...
Modifica: Non ho letto il post intermedio... chiedo scusa... hai fatto bene ad evitare l'uso di bp...
Ciaociao
