Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Использование ассемблера для оптимизации программ на С++ - Магда Ю.С.

Магда Ю.С. Использование ассемблера для оптимизации программ на С++ — БХВ-Петербург , 2004. — 496 c.
ISBN 5-94157-414-2
Скачать (прямая ссылка): ispolzovaniyaassemblera2004.djvu
Предыдущая << 1 .. 103 104 105 106 107 108 < 109 > 110 111 112 113 114 115 .. 127 >> Следующая

ATOM MyRegisterClass(HINSTANCE hlnstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hlnstance,
HINSTANCE hPrevInstance,
410
Часть III. Встроенный ассемблер Visual C++ .NET2003 и его использование
LPTSTR
int
lpCmdLine
nCmdShow)
11 TODO: Place code here.
MSG msg;
HACCEL hAccelTable;
// Initialize global strings
LoadString(hlnstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hlnstance, IDC_GL13_TEST_TIMER, szWindowClass,
MAX_LOADSTRING) ;
MyRegisterClass(hlnstance);
// Perform application initialization: if (!Initlnstance (hlnstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hlnstance, (LPCTSTR)IDC_GL13_TEST_TIMER);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (ITranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
// FUNCTION: MyRegisterClass()
// PURPOSE: Registers the window class.
// COMMENTS:
// This function and its usage are only necessary if you want this code // to be compatible with Win32 systems prior to the 'RegisterClassEx'
Гпава 13. Встроенный ассемблер C++ .NET и функции времени Windows
411
// function that was added to Windows 95. It is important to call this // function so that the application will get 'well formed' small icons // associated with it.
ATOM MyRegisterClass(HINSTANCE hlnstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExt ra = 0;
wcex.hlnstance = hlnstance;
wcex.hlcon = Loadlcon(hlnstance, (LPCTSTR)IDI_GL13_TEST_TIMER);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW-2);
wcex.IpszMenuName = (LPCTSTR)IDC_GL13_TEST_TIMER;
wcex.lpszClassName = szWindowClass;
wcex.hlconSm = Loadlcon(wcex.hlnstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx(&wcex);
}
// FUNCTION: Initlnstance(HANDLE, int)
// PURPOSE: Saves instance handle and creates main window // COMMENTS:
// In this function, we save the instance handle in a global variable and // create and display the main program window.
BOOL Initlnstance(HINSTANCE hlnstance, int nCmdShow)
{
HWND hWnd;
hlnst = hlnstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CWJJSEDEFAULT, 0, CWJJSEDEFAULT, 0,
NULL, NULL, hlnstance, NULL);
412
Часть III. Встроенный ассемблер Visual C++ .NET 2003 и его использование
if (IhWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
11 FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
11 PURPOSE: Processes messages for the main window.
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM IParam)
{
int wmld, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
RECT rc;
#define TIMER1 1
switch (message)
{
case WM_COMMAND:
wmld = LOWORD (wParam) ; wmEvent = HIWORD(wParam);
// Parse the menu selections: switch (wmld)
{
case IDM_ABOUT:
DialogBox(hlnst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break;
Глава 13. Встроенный ассемблер C++ .NET й функции времени Windows
413
case IDM_EXIT:
DestroyWindow(hWnd); break; ,
default:
return DefWindowProc(hWnd, message, wParam, IParam);
}
break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWhd, &rc);
// TODO: Add any drawing code here...
TextOut(hdc, (rc.right-rc.left)/4, (rc.bottom-rc.top)/2, buf, written); EndPaint(hWnd, &ps); break; case WM_CREATE:
nTimer — SetTimer(hVJhd, TIMER1, 5000, NULL); break; case VJM_TIMER: switch(wParam) case TIMER1:
{
_asm {
finit
fldl
fadd DWORD PTR fl fstp DWORD PTR fl fid DHORD PTR fl fsqrt
fstp DWORd РГО fres fwait
>;
written = sprintf(buf," Value = %.3f, SQRT * %.3f", fl, fres); hdc 3 GetDC (hVJhd) ;
GetClientRect(hWhd, &rc);
InvalidateRect(hWhd, &rc, FALSE);
ReleaseDC(hWhd, hdc);
414
Часть III. Встроенный ассемблер Visual C++ .NET2003 и его использование
break;
}
break; case WM_DESTROY:
KillTimer (hVJhd, nTimer);
PostQuitMessage(0); break; default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
//Message handler for about box.
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 I I LOWORD (wParam) — IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam)); return TRUE;
}
break;
}
return FALSE;
}
Анализ листинга начнем с объявления переменных нашей программы. В начале кода определены следующие переменные:
? char buf [32] — символьный буфер для хранения преобразованного вещественного числа в строку, которая далее выводится на экран функцией
Предыдущая << 1 .. 103 104 105 106 107 108 < 109 > 110 111 112 113 114 115 .. 127 >> Следующая