Salve a tutti.
Ho questo esercizio da risolvere, ho provato a buttare giù un pò di codice, ma avrei bisogno di una mano.
Devo risolvere questo esercizio in assembler:
Dato un array di byte, invertire l'ordine dei bit all'interno dell'array.

non posso modificare le variabili già presenti.
Questo è il codice non modificabile, e il mio blocco in assembly
codice:
#include<stdio.h>
#include<stdlib.h>

void main()
{
#define MAX_LEN 100

//input
unsigned char vet[]={0x00,0x01};
unsigned int len=sizeof(vet)/sizeof(vet[0]);
//output
unsigned char res[MAX_LEN];

printf("%d\n",len);

//blocco asm
__asm{

                        XOR EAX,EAX		//i
			XOR EBX,EBX	//SOMMATORIA
			XOR ECX,ECX	//CONTATORE
			XOR AL,AL	//NUMERO	
			XOR AH,AH	//VERIFICA
			XOR ESI,ESI	//PER MOLT

			

			MOV EAX,0
			MOV EBX,0	
			MOV ECX,0
			MOV AL,vet[EAX]		//metto il vettore nel numero

COMINCIA:	AND AL,128	//VERIFICA=NUMERO AND 128
			MOV AH,AL
			JMP INIZIO
			
			
INIZIO:		CMP AH,1
			JE CICLO//se non è uguale continuo:
			SHL EDX,1//shift del numero
			INC ECX//inc contatore
			CMP ECX,8
			JB INIZIO
			INC EAX
			MOV len,EBX
			XOR EDX,EDX
			JMP COMINCIA

CICLO:
			//se il bit è1:
MOLTIPLICA:
			MOV ESI,2	
			IMUL ESI
			CMP ECX,0	//SE IL CONTATORE è 0 TI FERMI SE NO CONTINUI A MOLTIPLICARE
			JNE MOLTIPLICA
			ADD EBX,ESI
	
			CMP ECX,8 //cmp contatore e 8
			JB SALTO
			INC EAX 
			CMP EAX,len
			JNB FINE
			JMP COMINCIA


SALTO:		//se il contatore è minore di 8:
			SHL EDX,1//shift del numero
			INC ECX//incremento il contatore
			JMP INIZIO
			
FINE:

}


//stampa
{
unsigned int i;
for(i=0;i<len;i++)
printf("res[%2d]=%10d(%08X)\n",i,res[i],res[i]);
system("pause");
}


}
Questo è il codice. C'è qualcuno che riesce a correggermelo???
E spiegarmi come funziona l'and, che non so come usarla..grazie mille!