常用指令调试

#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN 
#include <Windows.h>
#include <WindowsX.h>
#include <math.h>
#include <xmmintrin.h>
#include <stdio.h>
#include <emmintrin.h>
#include <WinNT.h>
#include <WinNT.rh>
struct MyMatrix
{
 union
 {
  _declspec(align(16)) __m128 v[4];
  float  m[16];
  struct 
  {
   float _m11,_m12,_m13,_m14, _m21,_m22,_m23,_m24, _m31,_m32,_m33,_m34, _m41,_m42,_m43,_m44;
  };
 };
};
int _tmain(int argc, _TCHAR* argv[])
{
 if(IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE))
  printf("/nMMX available/n");
 else
  printf("/nMMX notAvailable/n");
 if(IsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE))
  printf("/nXMMX available/n");
 else
 {
  printf("/nXMMX notAvailable/n");
  return 0;
 }
 _declspec(align(16)) static float x[4]={1,2,3,4};
 _declspec(align(16)) static float y[4]={5,6,7,8};
 _declspec(align(16)) static float z[4]={0,0,0,0};
 __m128 m0, m1, m2;
 _asm
 {
  
  movaps xmm0,x
  addps  xmm0,y
  movaps z,xmm0
 }
 printf("/n x[%f,%f,%f,%f]",x[0],x[1],x[2],x[3]);
 printf("/n +y[%f,%f,%f,%f]",y[0],y[1],y[2],y[3]);
 printf("/n_____________________________________");
 printf("/n=z[%f,%f,%f,%f]/n",z[0],z[1],z[2],z[3]);
 
 //减法
 //subps xmm_dest,xmm_src/memory
 _asm
 {
  movaps xmm0,x
  subps xmm0,y
  movaps z,xmm0
 }
 printf("/n x[%f,%f,%f,%f]",x[0],x[1],x[2],x[3]);
 printf("/n -y[%f,%f,%f,%f]",y[0],y[1],y[2],y[3]);
 printf("/n_____________________________________");
 printf("/n=z[%f,%f,%f,%f]/n",z[0],z[1],z[2],z[3]);
 //除法
 //divps xmm_dest, xmm_src/memory
 _asm
 {
  movaps xmm0,x
  divps xmm0,y
  movaps z,xmm0
 }
 printf("/n x[%f,%f,%f,%f]",x[0],x[1],x[2],x[3]);
 printf("/n /y[%f,%f,%f,%f]",y[0],y[1],y[2],y[3]);
 printf("/n_____________________________________");
 printf("/n=z[%f,%f,%f,%f]/n",z[0],z[1],z[2],z[3]);
 //乘法
 //mulps xmm_dest,xmm_src/memory
 _asm
 {
  movaps xmm0,x
   mulps xmm0,y
   movaps z,xmm0
 }
 printf("/n x[%f,%f,%f,%f]",x[0],x[1],x[2],x[3]);
 printf("/n *y[%f,%f,%f,%f]",y[0],y[1],y[2],y[3]);
 printf("/n_____________________________________");
 printf("/n=z[%f,%f,%f,%f]/n",z[0],z[1],z[2],z[3]);
 //平方根
 //sqrtps xmm_dest,xmm_src/memory
 _asm
 {
  sqrtps xmm0, x
   movaps z,xmm0
 }
 printf("/n x[%f,%f,%f,%f]",x[0],x[1],x[2],x[3]);
 printf("/n sqrt");
 printf("/n_____________________________________");
 printf("/n=z[%f,%f,%f,%f]/n",z[0],z[1],z[2],z[3]);
 //与运算
 //andps xmm_dest,xmm_src/memory
 z[0]=0;z[1]=0;z[2]=0;z[3]=0;
 _asm
 {
  //movaps xmm0,x
  // andps xmm0,y
  // movaps z,xmm0
  movaps xmm0,x
   movaps xmm1,y
   andps xmm0,xmm1
   movaps z,xmm0
 }
 printf("/n x[%f,%f,%f,%f]",x[0],x[1],x[2],x[3]);
 printf("/n and y[%f,%f,%f,%f]",y[0],y[1],y[2],y[3]);
 printf("/n_____________________________________");
 printf("/n=z[%f,%f,%f,%f]/n",z[0],z[1],z[2],z[3]);
 //或运算
 //orps xmm_dest,xmm_src/memory
 z[0]=0;z[1]=0;z[2]=0;z[3]=0;
 _asm
 {
  movaps xmm1,x
   orps xmm1,y
   movaps z,xmm1
 }
 printf("/n x[%f,%f,%f,%f]",x[0],x[1],x[2],x[3]);
 printf("/n or y[%f,%f,%f,%f]",y[0],y[1],y[2],y[3]);
 printf("/n_____________________________________");
 printf("/n=z[%f,%f,%f,%f]/n",z[0],z[1],z[2],z[3]);
 //异或运算
 //xorps xmm_dest,xmm_src/memory
 _asm
 {
  movaps xmm0,x
   xorps xmm0,y
   movaps z,xmm0
 }
 printf("/n x[%f,%f,%f,%f]",x[0],x[1],x[2],x[3]);
 printf("/n xor y[%f,%f,%f,%f]",y[0],y[1],y[2],y[3]);
 printf("/n_____________________________________");
 printf("/n=z[%f,%f,%f,%f]/n",z[0],z[1],z[2],z[3]);
 //比较运算
 //cmpps xmm_dest,xmm_src/memory
 z[0]=0;z[1]=0;z[2]=0;z[3]=0;
 _asm
 {
  movaps xmm0,y
   movaps xmm1,x
   cmpps xmm0,xmm1,6
   movaps z,xmm0
 }
 printf("/n x[%f,%f,%f,%f]",x[0],x[1],x[2],x[3]);
 printf("/n 比较 y[%f,%f,%f,%f]",y[0],y[1],y[2],y[3]);
 printf("/n_____________________________________");
 printf("/n=z[%f,%f,%f,%f]/n",z[0],z[1],z[2],z[3]);

 return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值