汇编MMX实现图片淡入淡出核心代码


计算机组成课程个人作业

参考:

https://blog.csdn.net/yangjianqiao0/article/details/69388595

https://blog.csdn.net/dahan_wangtao/article/details/1944153

核心代码

#include
using namespace std;
__int64 i64_a[2],*p64=i64_a,test=1;
unsigned char a[4]={2,2,2,2},b[4]={128,128,128,128},*pa=a,*pb=b;
unsigned short step_now=15,step_all=32,stepMMXn[4],stepMMXl[4];
int main(){
//    i64_a[0]=0;
//    i64_a[1]=1;
//    __asm("\
//        mov p64,%eax\n\
//        movq (%eax),%mm0\n\
//        movq %mm0,8(%eax)\n\
//    ");
    for(int i=0;i<4;i++){
        stepMMXn[i]=step_now;
        stepMMXl[i]=32-step_now;
    }
    __asm("\
        pxor %mm7,%mm7\n\
        movd a,%mm0\n\
        movd b,%mm1\n\
        punpcklbw %mm7,%mm0\n\
        punpcklbw %mm7,%mm1\n\
        movq stepMMXl,%mm2\n\
        movq stepMMXn,%mm3\n\
        pmullw %mm2,%mm0\n\
        pmullw %mm3,%mm1\n\
        paddw %mm1,%mm0\n\
        psrlw $5,%mm0\n\
        packuswb %mm7,%mm0\n\
        movd %mm0,a\n\
    ");
    printf("%llx\n",test);
    printf("%d %d\n",sizeof(a),sizeof(test));
    for(int i=0;i<4;i++)
        printf("a=%d,b=%d\n",a[i],b[i]);
    return 0;
}

完整代码还在写