ciao a tutti!
ho un problema con un programma di assembler...
io dovrei, dato un array di byte, invertire l'ordine dei bit... quindi se come numero ho 10011000 devo ottenere 00011001.... e dovrei anche poi invertire di posizione questi numeri all'interno dell'array (es: {1,2,3} {3,2,1} ) ma per ora ho tralasciato questa parte...
mi sono dedicata all'invertire i vari bit...
facendo su visual studio il debug e guardando i registri, vedo che i primi due numeri del vettore me li inverte...il terzo no.. ma i primi due si...
(gli inversi sono {0x55,0x90,0x3F})
se faccio partire senza debug (addirittura quindi fare la stampa a video del risultato) però non mi da i numeri (almeno i primi 2) giusti..ma mi appare questo..
http://i277.photobucket.com/albums/k...atitolo1-3.png
non capisco l'errore o.o dovrebbe essere tutto a posto...

RAGIONAMENTO
ho il numero e la mia maschera..shifto a destra il numero.. se il Carry è 1 allora significa che deve essere 1 il primo bit del numero invertito...in quel caso faccio ADD tra la maschera e il mio numero e shifto la maschera per il bit successivo... nel caso invece il carry fosse 0 shifto la maschera ma non faccio ADD. e controllo anche che la maschera non sia 0, in quel caso ho finito di shiftare il numero e lo sposto nella cella del vettore risultato..
quando ho finito il numero incremento anche l'indice del vettore..per spostarmi al numero successivo..

codice:
#include <stdio.h>  
void main() 
{ 
#define MAX_LEN 100   	
//input 	
unsigned char vet[]={0xAA,0xFC,0x09};  	
unsigned int len=sizeof(vet)/sizeof(vet[0]);  
//output 	
unsigned char res[MAX_LEN];  	

_asm 	{      
 XOR EAX,EAX //contenuto cella dell'array       
XOR EBX,EBX //lo uso come maschera 	 
XOR ECX,ECX //uso per scorrere il vettore 	  
XOR EDX,EDX //indice nuovo numero con numeri invertiti
riparti: MOV AL,vet[ECX]  //metto il contenuto della prima cella in AL 	  
          MOV BL,0x80 //sposto il bl la mia maschera
ciclo:    SHR AL,1  //shifto il numero 	  
           JC bit_1 //controllo il riporto, se è 1 	  
           JNC bit_0    //se il flag è 0 shifto 
bit_0: SHR BL,1 	  
         JZ numero_finito 	  
         JMP ciclo 
bit_1:
         ADD AL,BL  //add tra il numero e la mia maschera 	   
         SHR BL,1 //sposto la maschera di 1 a destra  	   
         JZ numero_finito 	   
         JMP ciclo 
numero_finito: MOV res[EDX],AL  //sposto il numero invertito nel vettore risultato 	                INC ECX //incremento l'indice del vettore per passare al successivo numero da invertire 	CMP ECX,len  //controllo se ho finito tutto il vettore, in quel caso finisce il programma 	JE fine 			   
                                JMP riparti       
 fine:  //QUI METTO IL PROCEDIMENTO PER INVERTIRE DI ORDINE I NUMERI NELL'ARRAY	}   	

{ 		
unsigned int i; 		
for(i=0;i<len;i++) 		   
printf("res[%2d] = %10d (%08X)\n",i,res[i],res[i]); 	
}
}
non posso toccare le variabili in C..

sapete aiutarmi?? grazie infinite ç_ç se serve mando anche il rar con il progetto intero...
grazie ancora ç_ç ci ho lavoratto tutto il giorno.ed ora spengo perchè i miei occhi ormai non reggono più!
Grazie infinite!