Non puoi sapere cosa ci sia dentro, quindi è solo questione di sicurezza ...Originariamente inviato da DarkMessiaH
a che pro fare questi due xor?? e se index non è inizializzato che cosa ne risulta?
stessa cosa dicasi per il registro ax...
index è inizializzato a zero (xor index,index).Originariamente inviato da DarkMessiaH
passiamo aquesta porzione di codice:
/*inserisce nel registro ah il puntatore(?) al valore (str + index) dove index,che non è inizializzato. perchè?codice:for: mov ah, byte [str + index] ;; ah = *(str + index) inc index ;; index++ cmp ah, 0 ;; ah == 0 ? jz exitfor ;; if (ah == 0) goto exitfor cmp ah, carattere ;; ah == carattere ? jz toupper ;; if(ah == carattere) goto tolower jump for toupper: and ax, 0x5F ;; ax &= 0x5F mov byte [str + index - 1], ah ;;*(str + index - 1) = ah jump for exitfor: ;;...Codice...
incrementa index di 1
se il valore in ah è = 0 salta all'istruzione exitfor
se il valore in ah è = al carattere salta all'istruzione tolower
ripeti for*/
Non inserisco il puntatore, ma il valore contenuto in (str + index).
Semplicemente, prova con carta e penna, se fai l'and di un carattere con 0x5F, ottieni quel carattere maiuscolo ... una volta ottenuto maiuscolo lo reinserisco nella stringa; index è pero incrementato di uno, quindi la posizione corretta è la precedente.Originariamente inviato da DarkMessiaH
/*in toupper invece abbiamo:
and logico tra il valore contenuto in ah e 0x5f ovvero 95...perchè?
inserimento in ah di (str+index-1) anche questo...perchè?
ritorno al for*/
L'algoritmo è semplice:
-Scorri la stringa fino a quando non trovi uno zero.
-Se il str[index] è uguale a carattere, lo metti in and con 0x5f
Tutto qua.