关于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,结果就对了呢?这是为什么呢?
另外,"[]"在汇编这里是什么意思呢?非常感谢~
写了一段程序,大概是这样的:
..................
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地址指向的内容,而不是地址本身(不加[]时)。
__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]
非常感谢两位,但还是不大明白,
movss xmm ,m32 这个指令,左边的m32,到底指的是某个变量的值,还是它的地址呢?
如果按照楼上老师说的,那[esi]就是具体的某个值了
如果是这样,使用指针岂不是成了多此一举?先用指针指向了这个数组,再把
这指针赋给esi,再取值....那如果这样写,岂不是更加高效:
..................
float x[100];
__asm movss xmm0 ,x[0]
作者: menzi11 发布时间: 2011-04-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28