[EDIT] Actualizado
Cada vez que vea un operando de memoria que se ve algo como ds:0x00923030
, que es un modo de direccionamiento segmento relativa. La dirección real referida tp está en la dirección lineal 0x00923030 con respecto a la dirección base del registro de segmento ds
.
La segmentación de memoria en la arquitectura x86 es algo confusa, y creo que Wikipedia hace un buen trabajo al explicarla.
Básicamente, x86 tiene una serie de especiales segmento registros: cs
(código segmento), ds
(datos segmento), es
, fs
, gs
, y ss
(pila segmento). Cada acceso a la memoria está asociado con un cierto registro de segmento. Normalmente, no se especifica el registro de segmento, y dependiendo de cómo se accede a la memoria, se utiliza un registro de segmento predeterminado. Por ejemplo, el registro cs
se usa para leer las instrucciones.
Cada registro de segmento tiene una dirección base cierta y un límite. La dirección base determina la dirección física a la que corresponde la dirección lineal 0x00000000, y el límite determina la dirección lineal máxima permitida para ese segmento. Por ejemplo, si la dirección base era 0x00040000 y el límite era 0x0000FFFF, entonces las únicas direcciones lineales válidas serían 0x00000000 a 0x0000FFFF, y las direcciones físicas correspondientes serían 0x00040000 a 0x0004FFFF.
Por lo tanto, la dirección física en la que reside la subrutina que se llama está dada por la dirección base almacenada en el registro de segmento ds
, más 0x00923030. Pero aún no hemos terminado - la instrucción tiene la palabra ptr
en ella. Esto agrega un nivel adicional de direccionamiento indirecto, por lo que el objetivo real de la subrutina es la dirección almacenada en la ubicación ds:0x00923030
.
en al & sintaxis T (aceptado por el ensamblador GNU), la instrucción se escribiría de la siguiente manera:
lcall *ds:0x00923030
Para los detalles morbosos completo de lo que la instrucción es así, consulte la 80386 reference manual. Esta variante particular de la instrucción es "CALL r/m16"
(llamada cerca del registro indirecto/indirecto de memoria).
posible duplicado de [¿Qué significa "DS: \ [40207A \]" en el ensamblaje?] (Http://stackoverflow.com/questions/3819699/what-does-ds40207a-mean-in-assembly) –