HeroGian
30-05-2013, 14:32
salve a tutti, stavo scrivendo una funzione in assembly (IA32)che presi in ingresso una stringa e due caratteri (c1 e c2), restituisce la medesima stringa la quale al posto del carattere c1 viene copiato il carattere c2.
Il problema è che l'assemblatore mi restituisce un errore quando recupero le variabili dallo stack.. vi posto il codice
__declspec(naked)
void Sostituisci( char str1[], char c1, char c2 )
{
__asm{
;salvataggio di ebp sullo stack
push ebp
mov ebp, esp
;salvataggio registri
push ebx
push ecx
push edx
;recupero le variabili dallo stack
mov dword ptr ebx, [ebp+8] ;puntatore
mov byte ptr dl, [ebp+12] ;c1
mov byte ptr dh, [ebp+16] ;c2
;creazione variabili locali
mov dword ptr ecx, 0 ; contatore
while:
cmp byte ptr [ebx+1*ecx], 0
je fineWhile
;corpo if
cmp byte ptr [ebx+1*ecx], dl
jne nonSostituire
mov byte ptr [ebx+1*ecx], dh
nonSostituire:
inc ecx
jmp while
fineWhile:
;ripristino i registri
pop edx
pop ecx
pop ebx
pop ebp
ret
}
}
Il problema è che l'assemblatore mi restituisce un errore quando recupero le variabili dallo stack.. vi posto il codice
__declspec(naked)
void Sostituisci( char str1[], char c1, char c2 )
{
__asm{
;salvataggio di ebp sullo stack
push ebp
mov ebp, esp
;salvataggio registri
push ebx
push ecx
push edx
;recupero le variabili dallo stack
mov dword ptr ebx, [ebp+8] ;puntatore
mov byte ptr dl, [ebp+12] ;c1
mov byte ptr dh, [ebp+16] ;c2
;creazione variabili locali
mov dword ptr ecx, 0 ; contatore
while:
cmp byte ptr [ebx+1*ecx], 0
je fineWhile
;corpo if
cmp byte ptr [ebx+1*ecx], dl
jne nonSostituire
mov byte ptr [ebx+1*ecx], dh
nonSostituire:
inc ecx
jmp while
fineWhile:
;ripristino i registri
pop edx
pop ecx
pop ebx
pop ebp
ret
}
}