注册 登录
编程论坛 汇编论坛

弱问:SSE2中的MOVDQA的使用问题

gdutljg 发布于 2010-06-13 18:29, 2302 次点击
大家好:
我写了个交换两个16bit内存的代码如下:
void test()
{
    const int m = 16;
    const int n = 2;
    int len = m*n;
    unsigned char arr[m*n];
    for(int i = 0;i<len;i++)
    {
        arr[i] = i%255;
    }

    __asm
    {
        lea  eax,arr //得到arr的地址
        mov  esi,eax
        movdqa xmm0,[esi]
        movdqa xmm1,[esi+16]
        movdqa [esi+16],xmm0
        movdqa [esi],xmm1
    }
}
运行中断了
用movdqu代替就OK了,这是为什么?
初学SSE2,不太懂这两个的区别
谢谢指点
6 回复
#2
gdutljg2010-06-13 18:51
先顶一下
#3
zklhp2010-06-14 09:43
        movdqa XMM,XMM/m128     movdqa XMM/m128,XMM
        把源存储器内容值送入目的寄存器,当有m128时,必须对齐内存16字节.
#4
zklhp2010-06-14 09:44
        movdqu XMM,XMM/m128     movdqu XMM/m128,XMM
        把源存储器内容值送入目的寄存器,但不必对齐内存16字节.
#5
zklhp2010-06-23 13:06
LS 刷关键字的罢
1