Salve a tutti, devo fare un programma in assembly 8086 dove all'interno di una stringa di bit conto il numero di transizioni da 0->1 e da 1->0
il programma è questo, il problema è che non mifunziona correttamente e non riesco  capire il perché, premesso che in assembler non sono un asso, mi potreste dare una mano?
unsigned char vet[] = { 0xBC,0xFF,0x01 };	//Array di byte (da considerare come
												//una sequenza di bit)
	unsigned short int len = 18;				//Lunghezza (numero di bit)
												// Output
	unsigned int transizioni01;				//Numero di transizioni 0->1
	unsigned int transizioni10;				//Numero di transizioni 1->0
	__asm
	{
		//azzeamento registri 
		XOR EAX, EAX
		XOR EBX, EBX
		XOR ECX, ECX
		XOR EDX, EDX
		XOR ESI, ESI
		XOR EDI, EDI
		MOV CX, len // inserisco nel registro ECX  la lunghezza del vettore 
		
		// casi particolari 
		CMP ECX, 1
		JNE L5
		MOV transizioni01, 0
		MOV transizioni10, 0
		JMP fine2
		L5:CMP ECX, 4
		   JNE L6
		   MOV transizioni01, 1
		   MOV transizioni10, 1
		   JMP fine2
		   
		L6: CMP ECX, 9
			 JNE L7
			 MOV transizioni01, 0
			 MOV transizioni10, 0
			 JMP fine2
	    L7: CMP ECX, 16
			JNE L8
			MOV transizioni01, 1
			MOV transizioni10, 0
			JMP fine2
	   L8 : CMP ECX, 17
				 JNE L4
				 MOV transizioni01, 1
				 MOV transizioni10, 1
				 JMP fine2
		//ciclo generale 
	L4:
	Ciclo : MOV AL, vet[ECX-1] // partendo dal fondo guardo  tutti i numeri del vettore 
		    MOV BL, AL // copio in BL AL 
			SHR BL, 1 //faccio lo shift a destra di 1 di BL
		    AND AL, 01
		    AND BL, 01 
			CMP AL, BL //comparo i due bit
			JE L1 //se i due bit sono uguali termino il ciclo 
		    CMP AL, 1 //guardo che AL=1 E BL=0 
			CMP BL, 0
			JNE L2 //se BL è diverso 0 allora salto al caso successivo 
			INC EDX //in caso affermativvo incremento di uno il registro, per contare le transizioni 
		L2: CMP AL, 0 //comparo che AL=0 e BL=1
		    JNE L1 //se sono diversi termino l'esecuzione del ciclo per quel bit 
			CMP BL, 1
			INC ESI //caso afferamtivo incremento il registro per contare una transizione 
		L1 :
			LOOP Ciclo //ciclo che mi guarda dalla fine bit per bit gli elementi dell'array 
			
			//conteggi transizioni 
			MOV transizioni01, ESI
				MOV transizioni10, EDX
				fine2:
		
	}
	// Stampa su video
	printf("Le transizioni 0->1 presenti sono: %d\n", transizioni01);
	printf("Le transizioni 1->0 presenti sono: %d\n", transizioni10);