使用相对指针寻址数据(x86-32汇编程序)
答
取决于操作系统。通常有段寄存器DS(数据段)和CS(代码段)不同的值。 所以,你可以使用CS前缀,如:
mov edx, cs:[eax]
在这种情况下,默认的前缀是DS段寄存器。
答
您可以使用位置无关的代码:
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
我没有使用OS使用相同的与delta-偏移。我处于保护模式,所以有段描述符,而不是实际的段号。在我的情况下,只有两个段描述符,数据和代码(不包括空值)。 – 2010-09-13 20:34:58