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
Questo è il codice. C'è qualcuno che riesce a correggermelo???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"); } }
E spiegarmi come funziona l'and, che non so come usarla..grazie mille!

Rispondi quotando