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

时间:2010-09-13 14:43:50

标签: assembly x86 32-bit addressing relative-addressing

我正在使用32位x86汇编程序编写,我不太确定如何处理始终与代码关系相同的数据。我是否必须使用EIP来计算绝对地址,还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

您可以使用与位置无关的代码:

   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

答案 1 :(得分:0)

取决于操作系统。通常具有段寄存器DS(数据段)和CS(代码段)不同的值。 所以你可以使用cs前缀,如:

mov    edx, cs:[eax]

在这种情况下,默认前缀是ds segment register。