Vi espongo il problema: dato un array di byte, devo calcolare il numero di transizioni 0->1.

Ho scritto questo programma, ma un assemblatore online mi dice che non vale per tutti i casi:

codice:
#include <stdio.h>

void main()
{
	// Input
	unsigned char vet[] = {0xAA, 0xFC, 0x09};  // Array di byte (da considerare come una sequenza di bit)
	unsigned short int len = 19;  // Lunghezza (numero di bit)

	// Output
	unsigned int transizioni;  // Numero di transizioni

	__asm
	{
		XOR EDX,EDX  ; Azzeriamo EDX
		MOV AX,len  ; Copiamo la lunghezza della stringa in AX
		XOR ESI,ESI  ; Azzeriamo ESI
Cambia: MOV BL,vet[ESI]  ; Copiamo in BL la stringa con indice indicato da ESI
		MOV ECX,8  ; Copiamo in ECX la lunghezza di un byte

Scorri: JMP Contr  ; Controlliamo se si azzerano i registri contatori
Rit:    SHL BL,1  ; Scorriamo la stringa
		DEC AX  ; Decrementiamo AX
		DEC ECX  ; Decrementiamo ECX
        JNC Scorri  ; Se non c è riporto, scorriamo per cercare un 1

		CMP AX,18
		JE Scorri  ; Se troviamo un bit 1 al primo shift, non possiamo contarlo come transizione

		INC EDX  ; Incrementiamo il numero di transizioni
Scorri2:CMP AX,0
		JE Fine
		CMP ECX,0
		JE Cambia2  ; Controllo dei registri contatori
		SHL BL,1  
		DEC AX
		DEC ECX
        JC Scorri2  ; Scorriamo finchè non ritroviamo uno 0

Contr:  CMP AX,0
		JE Fine  ; Se AX è 0, abbiamo raggiunto il 19° bit
		CMP ECX,0
		JE Cambia2  ; Se ECX è 0, abbiamo scorso tutto il byte, quindi possiamo cambiare stringa
		JMP Rit
		
Cambia2:INC ESI  ; Incrementiamo l indice del vettore
		JMP Cambia

Fine:   MOV transizioni,EDX  ; Salviamo il numero di transizioni nell apposita variabile
	}

	// Stampa su video
	printf("Le transizioni 0->1 presenti sono: %d\n", transizioni);
}
Che ne pensate? A me sembra tutto corretto (il fatto che parti di codice siano ripetute è perchè non trovo altri metodi, e comunque per ora non mi interessa l'ottimizzazione del codice ma il fatto di risolvere il problema).