Non riesco a capire come funziona il flag di direzione in x86
. Il testo nelle mie lezioni dire che incrementi o decrementi registro fonte o destinazione ma questo non ha senso con il suo nome. Qualcuno può spiegare cosa fa?Flag di direzione in x86
risposta
Questo flag viene utilizzato nelle operazioni con le stringhe e specifica se le stringhe iniziano con un indirizzo basso e passano agli indirizzi più alti o viceversa.
Per istruzioni stringa, ECX
ha il numero di iterazioni, DS:ESI
ha l'indirizzo di origine e ES:EDI
ha la destinazione (da qui il s in ESI
e d in EDI
).
Dopo ogni iterazione, ECX
viene decrementato di uno, e ESI
e EDI
sono o incrementata o decrementata dalla dimensione dell'elemento (1 per operazioni di byte, 2 per le operazioni di word, ecc) secondo EFLAGS.DF
.
Se EFLAGS.DF
è 0
, ESI
e EDI
vengono incrementati, altrimenti stanno decrementato.
Prendiamo il numero rep movsb
come esempio di un'istruzione che dipende dall'indicatore di direzione.
Quando si esegue un rep movsb
, si fornisce un indirizzo di origine in esi
, un indirizzo di destinazione in edi
e conteggio in ecx
. Il processore esegue fondamentalmente un ciclo. Nel caso normale (quando il flag di direzione è chiaro) incrementa esi
e edi
ogni iterazione del ciclo, quindi le inizializzi in modo da puntare all'inizio dei blocchi di origine e destinazione che stai copiando. Durante l'esecuzione di REP MOVSB
, il processore incrementa gli indirizzi di origine e destinazione finché non raggiunge la fine del blocco da copiare.
Quando il flag di direzione è impostato, il processore decrementa invece i registri. Ciò significa che devi iniziare con loro puntando allo fine del blocco di memoria che stai copiando. Invece di iniziare dall'inizio e di copiare fino alla fine, inizia alla fine e copia all'indietro fino a quando non arriva all'inizio.
- 1. Come leggere e scrivere registri flag x86 direttamente?
- 2. Nell'assemblaggio x86, come è possibile impostare il flag di zero (ZF) senza eseguire un'operazione di confronto?
- 3. Cosa sono CLD e STD in linguaggio assembly x86? Cosa fa DF?
- 4. Flag di file NLog e keepFileOpen flag
- 5. Combinazione di flag -v e -A flag in grep
- 6. Overflow visibile in una direzione con scorrimento nell'altra direzione
- 7. Cambia direzione di ActionBar
- 8. bitwise controllare se flag flag
- 9. Nessun audio in Android-x86
- 10. Algoritmo di direzione cardinale in Java
- 11. Direzione di rotazione in Animazione CSS \ Trasformazione
- 12. Direzione di scorrimento in un OnPageChangeListener
- 13. Controllare la direzione di scorrimento in UIScrollView
- 14. Unisce la direzione in Mercurial?
- 15. idiomi di assembly x86
- 16. Come interpretare i flag CorFlags?
- 17. L'implementazione di flag di funzionalità in C#
- 18. Più dimensioni di pagina enorme in Linux (x86-64)?
- 19. Vettore di direzione da Quaternion?
- 20. direzione di crescita dello stack
- 21. Usa C2DM in Android-x86
- 22. Dereferenziare un'etichetta in assembly x86
- 23. Fibonacci Series in Assembly x86
- 24. "OR" Flag in mod_rewrite di .htaccess
- 25. Impostazione di più flag enum in XAML
- 26. x86 Istruzione di confronto che utilizza XOR invece di sottrazione
- 27. Modifica direzione scorrimento
- 28. direzione drawtext canvas
- 29. Rilevamento direzione scorrimento
- 30. // flag TODO in VS .Net
Quindi aumenta o diminuisce la stringa di conseguenza. Se una stringa inizia con un indirizzo più basso, aggiungerebbe ad esso o nell'altro caso eseguire l'opposto, giusto? –
aumenta o diminuisce il ** puntatore ** all'interno della stringa. –
Nathan Fellman, @Jerry Coffin, penso che il comportamento predefinito sia quello di copiare dall'inizio di un blocco di memoria (DF cancellato). In quali casi si vorrebbe copiare un blocco di memoria dalla fine (set DF)? – golem