| salve a tutti. Vedo che forse l'argomenti assembly non suscita molto interesse, ma non importa spero che qualcuno primo poi legga, o legga e melgio risponda. devo scorrere un vettore di numero interi e rimpire un nuovo vettore nel seguente modo: int vettore= 1,1,1,1,4,4,5,6 compresso= 4,1,2,4,1,5........4 volte il numero 1, una volta il numero 2 etc etc il programma funziona in tutti i casi tranne quando il vettore contiene un numero ripetuto più di 255. La consegna prevede che essendo un vettore di char una volta arrivato a 255 il contatore dei numeri uguali....anche se il 256esimo è uguale al 255esimo il programma deve scrivere 255, x (255 volte il numero x) e poi azzerare il contatore e scrivere 4,x (in pratica 255 x 4 x) invece che 259 x. vi lascio il codice: CODICE #include <stdio.h> #include <stdlib.h>
void main(){
#define MaxLen 1024 int Len = 30; unsigned char Buffer[MaxLen] = {97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,255} ; #define MaxLenComp (MaxLen*2+1) unsigned char BufComp[MaxLenComp];
__asm{ XOR EAX,EAX XOR EDX,EDX XOR ESI,ESI XOR EBX,EBX MOV EAX,0 // i = 0 MOV EDX,1 // j = 1 MOV ESI,0 // indice vettore compresso MOV EBX,1 // conta = 1
inizio: CMP EAX,30 JE fine // salta a fine se j > 30 XOR ECX,ECX MOV CL,Buffer[EDX] CMP Buffer[EAX],CL JE incrementa // vai a incrementa se i numeri coincidono //altrimenti3 spezza: MOV BufComp[ESI],BL // compresso[indice] = conta INC ESI XOR ECX,ECX MOV CL,Buffer[EAX] MOV BufComp[ESI],CL // compresso[indice] = vettore[i] INC EAX // i++ INC EDX // j++ INC ESI MOV EBX,1 JMP inizio
incrementa: INC EBX CMP EBX,255 JE spezza // vai a spezza se il contatore = 255 // altrimenti INC EAX INC EDX JMP inizio
fine: MOV BufComp[ESI],0 }
int i; for(i=0;i<Len;i++){ printf("%d ", Buffer[i]); } printf("\n\n");
for(i=0;BufComp[i];){ printf("%d ", BufComp[i++]); printf("%d ", BufComp[i++]); } system("pause"); } idee su come risolvere?
|