¿Cómo se determina el registro de segmento implícita de un puntero cerca?
-
04-10-2019 - |
Pregunta
En la sección 4.3 del Intel 64® e IA-32 arquitecturas de software Manual del desarrollador . Volumen 1: Arquitectura básica , que dice:
Un puntero cerca es un desplazamiento de 32 bits ... dentro de un segmento. punteros Cerca se utilizan para todas las referencias de memoria en un modelo de memoria plana o para referencias en un modelo segmentado donde se accede a la identidad del segmento está implícito.
Esto me lleva a preguntarse: ¿cómo está el segmento implícita registro determinado
Sé que (%eip)
y (%eip)
desplazados (por ejemplo -4(%eip)
) direcciones utilizan %cs
por defecto, y que las direcciones de (%esp)
y (%esp)
desplazados utilizan %ss
, pero qué sobre (%eax)
, (%edx)
, (%edi)
, (%ebp)
etc., y pueden depender de la registro de segmento implícito también en la instrucción de que la dirección de memoria operando aparece en?
Solución
Aparte de CS
y SS
registro de accesos que usted ha mencionado, la mayoría de los otros accesos utilizarán el registro de segmento DS
. Un par de excepciones, que yo recuerde:
- las instrucciones orientadas cuerdas utilizará el
ES
para el 'destino' (implícitamente dirigida por el registroEDI
) registro de segmento - accesos a memoria utilizando el registro
EBP
como un registro 'dirección base' van a utilizar el registro de segmentoSS
. Sin embargo, si el registroEBP
se usa como un registro de índice a escala, el segmento de utilizar seráDS
(a menos que el registro de dirección de base esESP
)