|
|
|
![]() |
|
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:59.