汇编MMX实现图片淡入淡出核心代码
计算机组成课程个人作业
参考:
https://blog.csdn.net/yangjianqiao0/article/details/69388595
https://blog.csdn.net/dahan_wangtao/article/details/1944153
核心代码
#include<iostream> 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; }
完整代码还在写