SDKに添付されるプログラムテンプレートの変更方法を以下に示します。
まず、DLLの作者・作成日付を宣言します。
次に、エントリの数を宣言します。
後は、エントリコードの記述です。

// vcppsdk.cpp : DLL アプリケーション用のエントリ
ポイントを定義します。
//
#include "stdafx.h"
#include "amd3d.h"
#include "round1.h"
#include <stdlib.h>
#include <math.h>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
// ****************************** 以下で、DLLのパラメータを決めます
********************************
// CREATORSIGNATURE には、名前や日付を文字列で記録します。
#define CREATORSIGNATURE "Horie, Seiichi. 1999.May.8"
// ENTRYCOUNTは、DLLにいくつエントリーがあるかを示します。
#define ENTRYCOUNT 2
// *********************
// DESCRIPTION00 には、entry00 の説明を文字列で行ってください。
#define DESCRIPTION00 "VC++ Standard, Generated Code"
// REQFEATURES00 には、entry00の必要とする機能をフラグで表します。複数必要ならビット論理和でつなげます。
// 3DNow!コードの場合 #define REQFEATURES00 RF_3DNOW
と指定します。
#define REQFEATURES00 RF_FPU
void entry00(struct TSAT * sat, float dt, int count)
{
float GMdt,R,w;
int i;
GMdt = - GM*dt;
for ( i=1; i<=count; i++ )
{
R = sat->P.X * sat->P.X
+
sat->P.Y*sat->P.Y
+
sat->P.Z*sat->P.Z;
w = float(GMdt/(sqrt(R)*R));
sat->V.X += sat->P.X * w;
sat->P.X += sat->V.X * dt;
sat->V.Y += sat->P.Y * w;
sat->P.Y += sat->V.Y * dt;
sat->V.Z += sat->P.Z * w;
sat->P.Z += sat->V.Z * dt;
}
}
// *********************
#define DESCRIPTION01 "i486 Optimized Code"
#define REQFEATURES01 RF_FPU
void entry01(struct TSAT * sat, float dt, int count)
{
float GMdt;
GMdt = - GM*dt;
__asm{
mov
esi,sat
fld [esi].V.Y // Vy
fld [esi].V.X // Vx Vy
fld dt // dt Vx Vy
fld [esi].P.Z // Z dt Vx Vy
fld [esi].P.Y // Y Z dt Vx Vy
fld [esi].P.X // X Y Z dt Vx Vy
mov
ecx,count
i486loopHere:
// R =
sat.P.X*sat.P.X+sat.P.Y*sat.P.Y+sat.P.Z*sat.P.Z;
fld st(0) // X X Y Z dt Vx Vy
fmul ST,ST // XX X Y Z dt Vx Vy
fld st(2) // Y XX X Y Z dt Vx Vy
fmul ST,ST // YY XX X Y Z dt Vx Vy
fadd // YY+XX X Y Z dt Vx Vy
fld st(3) // Z YY+XX X Y Z dt Vx Vy
fmul ST,ST // ZZ YY+XX X Y Z dt Vx Vy
fadd // R X Y Z dt Vx Vy
// w = float(GMdt/(sqrt(R)*R))//
fld st // R R X Y Z dt Vx Vy
fsqrt // R^0.5 R X Y Z dt Vx Vy
fmul // R^1.5 X Y Z dt Vx Vy
fdivr GMdt // newW X Y Z dt Vx Vy
fld st // w w X Y Z dt Vx Vy
// sat.V.X += w*sat.P.X
fmul ST,st(2) // w*X w X Y Z dt Vx Vy
fadd st,st(6) // Vx+wX w X Y Z dt Vx Vy
fst st(6) // Vx+wX w X Y Z dt newVx Vy
// sat.P.X += sat.V.X*dt
fmul st,st(5) // (Vx+wX)dt w X Y Z dt Vx Vy
faddp st(2),st // w newX Y Z dt Vx Vy
fld st // w w X Y Z dt Vx Vy
// sat.V.Y += w*sat.P.Y
fmul ST,st(3) // w*Y w X Y Z dt Vx Vy
fadd st,st(7) // Vy+wY w X Y Z dt Vx Vy
fst st(7) // Vy+wY w X Y Z dt Vx newVy
// sat.P.Y += sat.V.Y*dt
fmul st,st(5) // (Vy+wY)dt w X Y Z dt Vx Vy
faddp st(3),st // w X newY Z dt Vx Vy
// sat.V.Z += w*sat.P.Z
fmul ST,st(3) // w*Z X Y Z dt Vx Vy
fadd [esi].V.Z // Vz+wZ X Y Z dt Vx Vy
fst [esi].V.Z // Vz+wZ X Y Z dt Vx Vy
// sat.P.Z += sat.V.Z*dt//
fmul st,st(4) // (Vz+wZ)dt X Y Z dt Vx Vy
faddp st(3),st // X Y newZ dt Vx Vy
loop
i486loopHere
fstp [esi].P.X
fstp [esi].P.Y
fstp [esi].P.Z
fstp
dt
fstp
[esi].V.X
fstp
[esi].V.Y
}
}