2010-09-13 80 views

回答

0

取決於操作系統。通常有段寄存器DS(數據段)和CS(代碼段)不同的值。 所以,你可以使用CS前綴,如:

mov edx, cs:[eax] 

在這種情況下,默認的前綴是DS段寄存器。

+0

我沒有使用OS使用相同的與delta-偏移。我處於保護模式,所以有段描述符,而不是實際的段號。在我的情況下,只有兩個段描述符,數據和代碼(不包括空值)。 – 2010-09-13 20:34:58

1

您可以使用位置無關的代碼:

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

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