
とりあえず、こんな感じではじめようと思います。
b = a*a;
をやってみます。

#include "amd3d.h"
#include <windows.h>
#include <math.h>
#include <stdio.h>
main()
{
float a,b;
char buf[80];
a=1.7320508;
_asm{
femms
movd mm0,a
//mm0: ??:
a
pfmul (m0,m0)
//mm0 ??: a*a
movd b,mm0
// b = a*a
femms
}
sprintf(buf,"%f",b);
MessageBox(GetDesktopWindow(), buf,"Test 3DNow!",MB_OK);
}

とりあえず、種プロジェクトファイルをビルドしてGo!Go!Run!Run!って感じで。
どう?メッセージボックスに 3.0000ってでた?簡単でしょ?
でも、これではSIMD(1命令複数データ)でなくてSISD(1命令単一データ)ですね。
じゃあぁ、つぎは本格的にSIMDしてみましょう。

typedef struct vector {
float x,y;
} vector;
main()
{
vector v,w;
char buf[80];
v.x = 1.41421356;
v.y = 2.2360679;
// w.x = v.x*v.x;
// w.y = v.y*v.y;
_asm {
femms
movq mm0,v
//mm0: v.x
: v.y
pfmul (m0,m0)
//mm0 v.x*v.x: v.y*v.y
movq w,mm0
// w = v
femms
}
sprintf(buf,"%f %f",w.x,w.y);
MessageBox(GetDesktopWindow(), buf,"Test 3DNow!",MB_OK);
}

どおです。2.00000と5.00000って表示されました?
movd mm0,a
は単精度32ビットデータをレジスタ(64ビット)の右半分にロードします。
movq mm0,v
は32ビットデータ*2(2つの単精度浮動小数点データ)をレジスタにロードします。

pfmulをpfaddとすれば加算、pfsubとすれば減算です。