+ -
当前位置:首页 → 问答吧 → 关于vc内联汇编,SSE和指针的问题

关于vc内联汇编,SSE和指针的问题

时间:2011-04-10

来源:互联网

不太熟悉汇编,有问题想请教各位老师
写了一段程序,大概是这样的:

..................
float x[100];
float p=x;

__asm movss xmm0 ,p


上面在编译时可以通过,但xmm0所读取的却是p指向的地址的值,而不是p所指向的地址,导致了
错误,可是如果我这样写:

..................
float x[100];
float p=x;

__asm mov esi ,p
__asm movss xmm0 ,[esi]



就没问题了,我想问一下,这样和上面有什么区别呢?为什么通过了esi,结果就对了呢?这是为什么呢?
另外,"[]"在汇编这里是什么意思呢?非常感谢~

作者: menzi11   发布时间: 2011-04-10

嗯,__asm movss xmm0 ,p 读取的是p指向的地址的值
__asm mov esi ,p 把这个地址的值赋给esi

[esi]就是取esi地址指向的内容,而不是地址本身(不加[]时)。




作者: G_Spider   发布时间: 2011-04-10

[esi]表示取esi指向的地址中的内存数据,相当于*p。

作者: cnzdgs   发布时间: 2011-04-10

先道个歉,float p应改为float* p....


非常感谢两位,但还是不大明白,

movss xmm ,m32 这个指令,左边的m32,到底指的是某个变量的值,还是它的地址呢?
如果按照楼上老师说的,那[esi]就是具体的某个值了

如果是这样,使用指针岂不是成了多此一举?先用指针指向了这个数组,再把
这指针赋给esi,再取值....那如果这样写,岂不是更加高效:


..................
float x[100];

__asm movss xmm0 ,x[0]

作者: menzi11   发布时间: 2011-04-10