No puedo entender cómo funciona la bandera de dirección en x86
. El texto en mis conferencias decir que incrementos o decrementos el registro fuente o destino pero eso no tiene sentido con su nombre. ¿Alguien puede explicar lo que hace?Bandera de dirección en x86
Respuesta
Este indicador se usa en operaciones de cadena, y especifica si las cadenas comienzan en una dirección baja y proceden a direcciones más altas o viceversa.
Para instrucciones de cadena, ECX
tiene el número de iteraciones, DS:ESI
tiene la dirección de origen y ES:EDI
tiene el destino (de ahí el s en ESI
y la d en EDI
).
Después de cada iteración, ECX
se decrementa por uno, y ESI
y EDI
son o bien aumentada o disminuida por el tamaño del elemento (1 para las operaciones de byte, 2 para operaciones de palabras, etc.) de acuerdo a EFLAGS.DF
.
Si es EFLAGS.DF
0
, ESI
EDI
y se incrementan, de lo contrario están decremented.
Tomemos rep movsb
como ejemplo de una instrucción que depende del indicador de dirección.
Cuando hace un rep movsb
, proporciona una dirección de origen en esi
, una dirección de destino en edi
, y cuenta en ecx
. El procesador básicamente ejecuta un bucle. En el caso normal (cuando el indicador de dirección es claro) incrementa esi
y edi
cada iteración del ciclo, por lo que los inicializa para señalar el comienzo de los bloques de origen y destino que está copiando. Mientras ejecuta el REP MOVSB
, el procesador incrementa las direcciones de origen y de destino hasta que llega al final del bloque que se está copiando.
Cuando se establece el indicador de dirección, el procesador disminuye los registros en su lugar. Esto significa que debe comenzar señalando el final del bloque de memoria que está copiando. En lugar de comenzar desde el principio y copiar hasta el final, comienza al final y copia hacia atrás hasta que llega al comienzo.
- 1. x86 saltar a una dirección
- 2. Dirección/Signo Extender bit en conjunto de instrucciones x86
- 3. Posible captura de escritura en la dirección (x86 - linux)
- 4. ¿En qué dirección comienza a ejecutarse el x86?
- 5. Obtener la dirección de la instrucción actual para x86
- 6. ¿Qué hace la bandera permisiva?
- 7. ¿Qué significa un asterisco * antes de una dirección en el ensamblaje AT & T x86-64?
- 8. ¿Qué son CLD y STD para el lenguaje de ensamblaje x86? ¿Qué hace DF?
- 9. bandera 'activa' o no?
- 10. ¿Cuál es el propósito de la bandera AI_V4MAPPED en getaddrinfo?
- 11. desarmado una bandera enumeración
- 12. Python RegExp bandera global
- 13. Uso de enumeraciones bandera C en C++
- 14. ¿Qué es la "UE" en la arquitectura x86? (calcula la dirección efectiva?)
- 15. Desgarro de palabras en x86
- 16. Llevar la bandera en la sustracción
- 17. PHP Curl con --data bandera?
- 18. XMLSERIALIZE un campo Bandera Enum
- 19. ¿Cómo funciona la bandera NX?
- 20. Problema de la bandera nacional de Mauritus
- 21. x86 modismos de ensamblaje
- 22. ¿Qué es la bandera _REENTRANT?
- 23. Desreferenciar una etiqueta en ensamblador x86
- 24. i386 diferente de x86?
- 25. Usar C2DM en Android-x86
- 26. Depuración SIGBUS en x86 Linux
- 27. enumeraciones bandera sin poder de dos valores
- 28. edición de objetos y bandera isDirty()
- 29. mov instrucción en ensamblado x86
- 30. ¿Cómo funciona la bandera de gcc -pg?
De modo que aumenta o disminuye la cuerda en consecuencia. Si una cadena comienza con una dirección más baja, se agregaría o en el otro caso se realizaría lo contrario, ¿verdad? –
aumenta o disminuye el ** puntero ** dentro de la cadena. –
Nathan Fellman, @Jerry Coffin, creo que el comportamiento predeterminado es copiar desde el principio de un bloque de memoria (DF borrado). ¿En qué casos uno querría copiar un bloque de memoria desde el final en su lugar (conjunto DF)? – golem