Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    26

    Esercizio in assembler

    Salve a tutti. Il mio problema è, immesso un array di byte (la sequenza da comprimere) e un DWORD (lunghezza della sequenza), in output mi deve dare un array di byte (la sequenza compressa in run-length). In altre parole dati {34,45,45,3,2} --> {1,34,2,45,1,3,1,2,0}, dove la prima cifra è riferita al numero di volte che compare il 34, la seconda cifra è il valore stesso;
    la terza cifra, il 2, è il numero di volte che è presente 45, la quarta cifra è il valore stesso, e così via. Alla fine come elemento di chiusura lo 0. In assembler.
    Una bozza del programma che ho fatto:
    codice:
    xor eax,eax
    		mov eax,Len
    MENTRE: cmp eax,0
    		je FINE
    
    		mov esi,-1
    		mov	numocco,-1
    		mov edi,0
    		mov temp,Buffer[edi]
    CICLO:	inc esi
    		inc numocco
    		cmp temp,Buffer[esi]
    		je CICLO
    		jmp ALLORA
    ALLORA: inc esi
    		jmp CICLO
    		mov temp,Buffer[esi]
    		
    FINE:  
    }
    Se avete materiale me lo potete dire per favore?
    Grazie in anticipo a tutti.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma la domanda qual è?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    26
    La domanda è se avete qualche idea per risolvere questo esercizio.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ah ... non era affatto chiaro ...

    Comunque dovremmo partire dal tuo codice ... l'hai provato ? Cosa non va ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    26
    Un pò tutto

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Un po' tutto non vuol dire nulla ...

    Devi provare a spiegare quel che hai scritto e perché ... e poi c'è un main?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    26
    Allora questo è il codice che ho provato a fare:
    codice:
    #include <stdio.h>
    
    void main() {
    //Variabili
    #define MaxLen 1024
    int Len=30;                       //Lunghezza della sequenza da comprimere
    unsigned char Buffer[MaxLen]={1,2,3,3,3,3,0,1,0,0,0,0,0,0,0,0,0,0,   //I dati 
    	                          0,0,0,4,5,99,99,99,255,255,255,255};    //comprimere
    #define MaxLenComp (MaxLen*2+1)
    unsigned char BufComp[MaxLenComp];   //Vettore in cui mettere i dati compressi
    unsigned char temp;
    int numocco;
    //Blocco Assembler
    __asm{
    		xor eax,eax
    		mov eax,Len
    MENTRE: cmp eax,0
    		je FINE
    
    		mov esi,-1
    		mov	numocco,-1
    		mov edi,0
    		mov temp,Buffer[edi]
    CICLO:	inc esi
    		inc numocco
    		cmp temp,Buffer[esi]
    		je CICLO
    		jmp ALLORA
    ALLORA: inc esi
    		jmp CICLO
    		mov temp,Buffer[esi]
    		
    FINE:  
    }
    
    int i,j;
    
    for (i=0;i<=Len;i++){
    temp=Buffer[i];
    	for(j=i+1;j<Len;j++){	
    			numocco=1;
    		if (temp==Buffer[j]){
    			numocco++;
    			Buffer[j]="";
    		}
    	}
    	BufComp[i]=numocco;
    		printf("%d\n", cstr(numocco));
    	BufComp[i+1]=temp;
    		printf("%c\n", temp);
    }
    	BufComp[i+2]="0";
    printf("%03d",BufComp[0]);
    for (i=0;i<Len;i++){
    	printf("\n", BufComp[i]);
    }
    system("pause");
    
    
    
    
    
    Stampa su video
    {
    mov esi,-1
    		mov	numocco,-1
    		mov edi,0
    		mov temp,Buffer[edi]
    CICLO:	inc esi
    		inc numocco
    		cmp temp,Buffer[esi]
    		je CICLO
    		jmp ALLORA
    ALLORA: inc esi
    		jmp CICLO
    		mov temp,Buffer[esi]
    
    		
    		
    		
    		int i;
    	for (i=0;i<Len;i++){
    		printf("%02X ",Buffer[i]);
    		}
    	printf("\n");
    	for (i=0;BufComp[i];){
    		printf("%3d ",BufComp[i++]);
    		printf("%02X",BufComp[i++]);
    	}
    	printf("\n");
    }
    }
    La mia bozza di idea è questa però quando lo compilo esce la finestra, dura 2 secondi, e si chiude subito facendomi vedere una serie di numeri.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    C'è del codice assembly e del codice C che non c'entrano l'uno con l'altro ...

    Non basta scrivere su un forum per rimediare con la "bacchetta magica" ... quello che si chiede e da cui si parte deve avere un senso ... purtroppo qui c'è solo una grande confusione ...
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.