Ciao a tutti,
devo scrivere una funzione in assembly che copi una stringa ma la stringa risultante ha dei valori iniziali non previsti.
Esempio:
void main(){
char Stringa1[]="Stringa da copiare";
char Stringa2[20];
CopiaStringa(Stringa1,Stringa2);
printf("%s\n",Stringa2); //Ottengo come output "çççççççç...Stringa da copiare" (con ç intendo dei valori sconosciuti, non saprei riprodurli qui, ma penso abbiate capito)
getchar();
}
La funzione in assembly è la seguente:
.586
.model flat
.code
_CopiaStringa proc
push ebp
mov ebp,esp
push ebx
push ecx
push edx
push esi
push edi
pop ebx
pop ecx
pop edx
pop esi
pop edi
mov eax,dword ptr[ebp+8] ;Stringa1
mov ebx,dword ptr[ebp+12] ;Stringa2
mov esi,0 ;Contatore vettore
;Vedo se la Stringa1 sia vuota
cmp byte ptr[eax],0
je FINE
CICLO:
mov cl,byte ptr[eax+esi]
mov dl,byte ptr[ebx+esi]
cmp cl,0 ;Vedo se ho raggiunto il terminatore in Stringa1
je FINE
mov dl,cl ;Effettuo la copia
inc esi ;Incremento contatore ciclo
jmp CICLO
FINE:
mov dl,0 ;Inserisco terminatore in Stringa2
mov esp,ebp
pop ebp
ret
_CopiaStringa endp
end
Sapreste dirmi cosa sbaglio?
Inoltre ne approfitto per chiedervi se è corretto ad inizio programma inserire le istruzioni push anche per i registri ecx,edx,edi che non utilizzo. Chiedo inoltre se è corretto inserire subito dopo le istruzioni pop o se queste vanno fatte prima di chiudere la funzione (ho fatto delle prove e non noto alcuna differenza quindi non capisco quale sia la soluzione corretta).
Grazie in anticipo!