Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    4

    Assembly

    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!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Questo

    http://forum.html.it/forum/showthread/t-1511333.html

    ti può aiutare?

    P.S. Guarda che i titoli dei thread devi sceglierli meglio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.