2009-11-03 10 views

Respuesta

15

Como dicen algunas de las otras respuestas, la palabra clave offset se refiere al desplazamiento del segmento en el que está definido. Sin embargo, tenga en cuenta que los segmentos pueden superponerse y el desplazamiento en un segmento puede ser diferente en otro segmento. Por ejemplo, suponga que tiene el segmento siguiente en modo real

data SEGMENT USE16 ;# at 02000h 

    org 0100h 
    foo db 0 

    org 01100h 
    bar db 0 

data ENDS 

Y mira el siguiente código:

mov ax, 2000h 
mov ds, ax 

mov bx, offset foo ; bx = 0100h 
mov byte ptr [bx], 10 ; foo = 10 

mov ax, 3000h 
mov ds, ax 

mov bx, offset foo; bx = 0100h 
mov byte ptr [bx], 10 ; bar = 10 

El ensamblador ve que foo es en desplazamiento 0100h desde la base de data SEGMENT, así que donde quiera ve offset foo pondrá el valor 0100h, independientemente del valor de DS en el momento.

En el segundo ejemplo DS es 0300h, por lo que la base del segmento apuntado por DS es 03000h. Esto significa que ds:[offset foo] apunta a la dirección 03000h + 0100h que es lo mismo que 02000h + 01100h, que apunta a bar.

edit: error lógico corregido en código

6

Simplemente significa la dirección de ese símbolo. Es un poco como el operador & en C, si está familiarizado con eso.

1

En el modo x 16bit de 16 bits, el espacio de direcciones no es plano; en cambio, las direcciones se componen de un desplazamiento y un "segmento". El "segmento" apunta a un espacio de 64 K, el desplazamiento está dentro de ese espacio.

Ver http://en.wikipedia.org/wiki/Memory_segmentation

3

offset significa que si registro será igual a la desviación de la variable valor1 (no a su valor real). Offset es la dirección desde el comienzo del segmento de memoria donde se almacena la variable. El desplazamiento generalmente es relativo al segmento ds (en su caso, los registros ds y cs apuntan al mismo segmento).

1

Offset es básicamente la distancia desde el punto de segmento (también llamado punto de referencia). por ejemplo, la dirección del segmento es 0000 y el desplazamiento o la dirección lógica es 0100, luego la dirección física puede contarse sumando los dos pares. Dirección física = 0000 + 0100 = 0100 significa que nuestro lugar requerido está en la dirección del 0100. Del mismo modo, si la dirección del segmento es 1DDD y desplazamiento es 0100, entonces: dirección física es: 1DDD + 0100 = 1EDD

Medios que nuestro destino es 1EDD.

Cuestiones relacionadas