使用相对指针寻址数据(x86-32汇编程序)

我正在写32位x86汇编程序,我不太确定如何处理始终与代码关系相同的数据。我是否必须使用EIP来计算绝对地址,还是有更好的方法?     
已邀请:
您可以使用与位置无关的代码:
   call @f
   dd 42 ; data
@@:
   pop eax ; eax contains offset of data
   mov eax, cs:[eax]
或者使用相同的delta-offsets
   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
    
取决于操作系统。通常具有段寄存器DS(数据段)和CS(代码段)不同的值。 所以你可以使用cs前缀,如:
mov    edx, cs:[eax]
在这种情况下,默认前缀是ds segment寄存器。     

要回复问题请先登录注册