Discussione: [C] Problema stringa
View Single Post
Old 24-07-2005, 21:04   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da repne scasb
Nel caso di *(s+i) si tratta di un test zero/non_zero, se il compilatore ha l'indirizzo di 's' e la quantita' i posso aiutarlo con *(s+i) perche fara':

cmp [esi+eax],0

Se avessi scritto s[i], il compilatore avrebbe potuto ragionare nel seguente modo:

mov bl,[esi+eax]
or bl,bl
1) un giorno va a finire che senza volerlo di capita il compilatore anomalo che genera il doppio del codice che intendevi tu
2) su questo forum penso che siamo tutti d'accordo che il tuo codice è per almeno metà (spesso di più) difficilmente leggibile, e quindi difficilmente manutenibile (anche facendoci l'occhio).

Quote:
Nel caso s[i] sulla printf, il compilatore "deve" effettuare il push della quantita' s[i], che purtroppo e' un byte e per una limitazione dell'assembly 80x86 non si possono "pushare" byte sullo stack
non vorrei sbagliare, ma secondo me stai continuando a dimostrare di non sapere cosa significhi l'allineamento dello stack... tanto che prima lo confondevi col mantenimento!
il fatto che l'istruzione PUSH non possa decrementare ESP di 1 non è una limitazione, è una caratteristica ben motivata, a parte il fatto che se proprio vuoi spingere un solo byte nello stack puoi anche farlo: basta che fai DEC ESP e poi scrivi il byte in memoria, ma così per l'appunto disallinei lo stack
non che non si possa fare, solo che devi farci attenzione perché può essere pericoloso. a volte lo si fa anche apposta (esistono alcune tecniche di questo tipo per disorientare i debuggers, ma funzionano solo in user mode).
71104 è offline   Rispondi citando il messaggio o parte di esso