|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2009
Messaggi: 34
|
[Assembly] dubbio mov a 32 bit
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 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
}
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
No ho problemi con Visual C++ ...
Per quanto riguarda le linee seguenti, non devi usare la PTR (fra l'altro usata in maniera sbagliata) Codice:
;recupero le variabili dallo stack mov ebx, [ebp+8] ;puntatore mov dl, [ebp+12] ;c1 mov dh, [ebp+16] ;c2 ;creazione variabili locali mov ecx, 0 ; contatore |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Occhio che alcuni compilatori vogliono che usi pushl e popl invece dei generici push e pop.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:03.



















