x86汇编的一个问题(32位)

在书上看到的,例如,寄存器esi中存放着LoadLibraryA的入口地址0x00280000。

后面要调用LoadLibraryA,用如下这条指令。

call dword ptr ds:(esi) //这里本应用中括号的,但是打不出来,只好用小括号代替

我有如下问题。
1.这个0x280000我知道是个相对虚拟地址,可是为什么会是用ds:(edi)来调用?这是说这个是相对于数据段的相对地址吗?为什么不是cs:(edi)或者ss:(edi) ?

2.我这里改为call edi 可不可以?

3.这个相对地址,是相对于ds,即是距离ds段起始地址0x280000?还是距离程序加载的基址image base

http://blog.csdn.net/w1964332/article/details/12921487