実験結果
元ソース
- // Sample.cpp :
アプリケーション用のエントリ
ポイントの定義
//
#include "stdafx.h"
#include "resource.h"
#define MAX_LOADSTRING 100
// グローバル変数:
HINSTANCE hInst; // 現在のインスタンス
TCHAR szTitle[MAX_LOADSTRING]; // タイトル バー
テキスト
TCHAR szWindowClass[MAX_LOADSTRING]; // タイトル
バー テキスト
// このコード
モジュールに含まれる関数の前宣言:
ATOM MyRegisterClass( HINSTANCE hInstance );
BOOL InitInstance( HINSTANCE, int );
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
LRESULT CALLBACK About( HWND, UINT, WPARAM, LPARAM );
//
テスト用に追加されたコードのプロトタイプ
void ProcTest0(long Arg1);
void ProcDivMod();
void ProcMemory();
long ProcDummy(long Arg1);
// ウィンメイン
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
// TODO:
この位置にコードを記述してください。
MSG msg;
HACCEL hAccelTable;
// グローバル ストリングを初期化します
LoadString(hInstance, IDS_APP_TITLE, szTitle,
MAX_LOADSTRING);
LoadString(hInstance, IDC_SAMPLE, szWindowClass,
MAX_LOADSTRING);
MyRegisterClass( hInstance );
// アプリケーションの初期化を行います:
if( !InitInstance( hInstance, nCmdShow ) )
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance,
(LPCTSTR)IDC_SAMPLE);
// メイン メッセージ ループ:
while( GetMessage(&msg, NULL, 0, 0) )
{
if( !TranslateAccelerator (msg.hwnd, hAccelTable,
&msg) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
// テスト用に追加されたコード
(void) ProcTest0(1000);
return msg.wParam;
}
//
// 関数: MyRegisterClass()
//
// 用途: ウィンドウ クラスの登録
//
// コメント:
//
// この関数およびその使用はこのコードを
Windows 95 で先に追加された
// 'RegisterClassEx' 関数と Win32
システムの互換性を保持したい場合に
//
のみ必要となります。アプリケーションが、アプリケーションに関連付け
// られたスモール
アイコンを取得できるよう、この関数を呼び出すことは
// 重要です。
//
ATOM MyRegisterClass( HINSTANCE hInstance )
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_SAMPLE);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCSTR)IDC_SAMPLE;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance,
(LPCTSTR)IDI_SMALL);
return RegisterClassEx( &wcex );
}
//
// 関数: InitInstance(HANDLE, int)
//
// 用途: インスタンス
ハンドルの保存とメイン
ウィンドウの作成
//
// コメント:
//
// この関数では、インスタンス
ハンドルをグローバル変数に保存し、プログラムの
// メイン
ウィンドウを作成し表示します。
//
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
{
HWND hWnd;
hInst = hInstance; //
グローバル変数にインスタンス
ハンドルを保存します
hWnd = CreateWindow(szWindowClass, szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL,
hInstance, NULL);
if( !hWnd )
{
return FALSE;
}
ShowWindow( hWnd, nCmdShow );
UpdateWindow( hWnd );
return TRUE;
}
//
// 関数: WndProc(HWND, unsigned, WORD, LONG)
//
// 用途: メイン
ウィンドウのメッセージを処理します。
//
// WM_COMMAND - アプリケーション
メニューの処理
// WM_PAINT - メイン ウィンドウの描画
// WM_DESTROY -
終了メッセージの通知とリターン
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM
wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
switch( message )
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// メニュー選択の解析:
switch( wmId )
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd,
(DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow( hWnd );
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
break;
case WM_PAINT:
hdc = BeginPaint (hWnd, &ps);
// TODO:
この位置に描画用のコードを追加してください...
RECT rt;
GetClientRect( hWnd, &rt );
DrawText( hdc, szHello, strlen(szHello), &rt,
DT_CENTER );
EndPaint( hWnd, &ps );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
return 0;
}
// バージョン情報ボックス用メッセージ
ハンドラ
LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM
wParam, LPARAM lParam )
{
switch( message )
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL
)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
////////
// テスト用に追加されたコードの実体
void ProcTest0(long Arg1){
(void) ProcDivMod();
(void) ProcMemory();
(void) ProcDummy(0);
}
void ProcDivMod(){
char a,b;
a=(char)ProcDummy(10);
b=(char)ProcDummy(3);
(void) ProcDummy(a/b);
(void) ProcDummy(a%b);
}
void ProcMemory(){
long x,y;
char a[100],b[100];
/* char *c;*/
x=ProcDummy(100);
(void) memcpy(a,b,x);
a[50]='A';
(void) memset(b,' ',x);
y = memcmp(a,b,x);
(void) ProcDummy(y);
/* c = (char *)strchr(a,'a');
(void) ProcDummy((long)*c);*/
}
//
計算式が最適化されないようにするためのダミー関数
long ProcDummy(long Arg1){
return (Arg1);
}
出力結果
- long Main(void arg1, void arg2)
/* Takes no parameters.
* Have 28Byte(s) local variable(s).
*/
{
long loc1; /* ESP 16 */
long loc2; /* ESP 20 */
long loc3; /* ESP 24 */
register long loc4; /* ESI */
register long loc5; /* EAX */
loc4 = arg1;
/* 004040D0 */
(void) LoadStringA(loc4, 103, var004054F4, 100);
/* 004040D0 */
(void) LoadStringA(loc4, 109, var00405490, 100);
/* 004010D0 No prototype. */
(void) proc_0001(loc4);
/* 00401160 No prototype. */
loc5 = proc_0002(loc4, arg2);
if (loc5 == 0) {
return (loc5);
}
/* 004040D4 */
loc4 = LoadAcceleratorsA(loc4, (char *)0000006D);
if (GetMessageA(&loc1, 0, 0, 0) != 0) {
do {
if (TranslateAcceleratorA(loc1, loc4, &loc1) == 0) {
/* 004040E0 */
(void) TranslateMessage(&loc1);
/* 004040E4 */
(void) DispatchMessageA(&loc1);
}
} while (GetMessageA(&loc3, 0, 0, 0) != 0);
}
/* 00401360 No prototype. */
(void) proc_0003(0x000003E8);
return (loc2);
}
long proc_0001(void arg1, void arg2)
/* Takes 4 bytes of parameters.
* Unknown calling convention.
* Have 48Byte(s) local variable(s).
*/
{
long loc1; /* ESP 4 */
void loc2; /* ESP 12 */
void loc3; /* ESP 16 */
void loc4; /* ESP 20 */
long loc5; /* ESP 24 */
void loc6; /* ESP 28 */
long loc7; /* ESP 32 */
long loc8; /* ESP 36 */
void loc9; /* ESP 44 */
register long loc10; /* EAX */
loc10 = arg2;
loc2 = 48;
loc3 = 3;
loc4 = &var004011C0;
loc5 = 0;
loc6 = 0;
loc7 = loc10;
/* 004040C4 */
loc8 = LoadIconA(loc10, (char *)0000006B);
/* 004040C8 */
loc7 = LoadCursorA(0, (char *)00007F00);
loc9 = 6;
arg1 = 109;
arg2 = var00405490;
/* 004040C4 */
loc10 = LoadIconA(loc5, (char *)0000006C);
arg1 = loc10;
/* 004040CC */
return (RegisterClassExA(&loc1));
}
long proc_0002(void arg1, long arg2)
/* Takes 8 bytes of parameters.
* Unknown calling convention.
*/
{
register long loc1; /* EAX */
register long loc2; /* ESI */
loc1 = arg1;
var00405558 = loc1;
/* 004040B8 */
loc1 = CreateWindowExA(0, var00405490, var004054F4,
0x00CF0000, 0x80000000, 0, 0x80000000, 0, 0, 0, loc1, 0);
loc2 = loc1;
if (loc2 == 0) {
return (loc1);
}
/* 004040BC */
(void) ShowWindow(loc2, arg2);
/* 004040C0 */
(void) UpdateWindow(loc2);
return (1);
}
void proc_0003()
/* Takes 4 bytes of parameters.
* Unknown calling convention.
*/
{
/* 00401380 No prototype. */
(void) proc_0004();
/* 004013C0 No prototype. */
(void) proc_0006();
/* 00401430 No prototype. */
(void) proc_0005(0);
return;
}
void proc_0004()
/* Takes no parameters.
* Unknown calling convention.
*/
{
register long loc1; /* EAX */
register char loc2; /* BL */
register char loc3; /* AL */
register long loc4; /* EDI */
register long loc5; /* ESI */
register char loc6; /* rTMP */
register long loc7; /* EDX */
/* 00401430 No prototype. */
loc1 = proc_0005(10);
loc2 = loc3;
/* 00401430 No prototype. */
loc1 = proc_0005(3);
loc4 = loc2;
loc5 = loc3;
loc1 = loc4;
loc6 = loc1;
loc7 = loc6 % loc5;
/* 00401430 No prototype. */
(void) proc_0005(loc6 / loc5);
loc1 = loc4;
loc6 = loc1;
loc1 = loc6 / loc5;
/* 00401430 No prototype. */
(void) proc_0005(loc6 % loc5);
return;
}
long proc_0005(void arg1)
/* Takes 4 bytes of parameters.
* Unknown calling convention.
*/
{
return (arg1);
}
void proc_0006()
/* Takes no parameters.
* Unknown calling convention.
* Have 200Byte(s) local variable(s).
*/
{
long loc1; /* ESP 8 */
long loc2; /* ESP 12 */
long loc3; /* ESP 108 */
long loc4; /* ESP 112 */
void loc5; /* ESP 158 */
register long loc6; /* EAX */
register long loc7; /* EDI */
register long loc8; /* EDX */
register long loc9; /* ESI */
register long loc10; /* ECX */
/* 00401430 No prototype. */
loc6 = proc_0005(100, loc7);
loc8 = loc6;
loc9 = &loc2;
loc7 = &loc4;
loc10 = loc8 >> 2;
/* Unsupported operation. */
_asm{004013DE F3A5 REP_MOVS ESI,EDI};
loc10 = loc6;
loc6 = 0x20202020;
loc10 = loc10 & 3;
/* Unsupported operation. */
_asm{004013ED F3A4 REP_MOVS ESI,EDI};
loc10 = loc8;
loc7 = &loc1;
loc9 = loc10;
loc5 = 65;
loc10 = loc10 >> 2;
/* Unsupported operation. */
_asm{00401402 F3AB REP_STOS EDI,EAX};
loc10 = loc9;
loc9 = &loc3;
loc10 = loc10 & 3;
/* Unsupported operation. */
_asm{0040140D F3AA REP_STOS EDI,AL};
loc10 = loc8;
loc7 = &loc1;
loc6 = 0;
/* Unsupported operation. */
_asm{00401417 F3A6 REPE_CMPS ESI,EDI};
/* Unsupported operation. */
_asm{0040141B 7405 JE 0x};
if {
/* Unsupported operation. */
_asm{0040141D 1BC0 SBB EAX,EAX};
/* Unsupported operation. */
_asm{0040141F 83D8FF SBB EAX,-1};
}
/* 00401430 No prototype. */
(void) proc_0005(loc6, loc9);
return;
}
トップ 戻る:ブラウザで。