2010-09-13 28 views

Répondre

0

En fonction du système d'exploitation. Normalement, le segment enregistre les valeurs DS (segment de données) et CS (segment de code) différentes. Vous pouvez donc utiliser le préfixe cs comme:

mov edx, cs:[eax] 

Dans ce cas, le préfixe par défaut est ds registre de segment.

+0

Je ne suis pas en utilisant un système d'exploitation. Je suis en mode protégé, donc il y a un descripteur de segment, pas un numéro de segment réel. Et dans mon cas il n'y a que deux descripteurs de segment, pour les données et le code (sans compter le null). –

1

Vous pouvez utiliser la position indépendante code:

call @f 
    dd 42 ; data 
@@: 
    pop eax ; eax contains offset of data 
    mov eax, cs:[eax] 

ou utiliser le même avec delta décalages

call base 
base: 
    pop ebp 
    sub ebp, base ; to use small offsets, -128 to +127, and smaller instruction size 
    ;.... 
    mov eax, cs:[ebp+dataN-base] ; dataN-base is called "delta-offset" 
    ;.... 
data1: 
    dd 100 
    ;.... 
dataN: 
    dd 200