fasm DirectDraw test
来源:互联网 发布:数据安全人员工作职责 编辑:程序博客网 时间:2024/06/06 12:44
接前三节的头文件,写一个简单的测试:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;*--==--* fasm directdraw test.;*--==--* By G-Spider;*--==--* fasm ddraw.asm ddraw.exe;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>format PE GUI 4.0entry startinclude 'win32.inc'include 'DDraw.inc'macro retjnz labal{ test eax,eax jnz labal}macro retjz labal{ test eax,eax jz labal}MY_DDRAWERR = (WM_USER + 1);------------------------------------------------------------section '.text' code readable writeable executable start: invoke GetModuleHandle,0 mov [wc.hInstance],eax invoke LoadCursor,0,IDC_ARROW mov [wc.hCursor],eax invoke RegisterClass,wc retjz end_loop invoke GetSystemMetrics,SM_CXSCREEN mov [point.x],eax shr eax,1 mov [txtpoint.x],eax invoke GetSystemMetrics,SM_CYSCREEN mov [point.y],eax shr eax,1 mov [txtpoint.y],eax invoke CreateWindowEx,0,szClass,szTitle,WS_POPUP,0,0,[point.x],[point.y],NULL,NULL,[wc.hInstance],NULL retjz end_loop mov [hwnd],eax ;========================================= ; 创建DirectCraw对象 invoke DirectDrawCreate,NULL,DDraw,NULL retjnz end_loop ; 取得独占和全屏模式 cominvk DDraw,SetCooperativeLevel,[hwnd],DDSCL_EXCLUSIVE+DDSCL_FULLSCREEN retjnz ddraw_err ; 初始化DDSURFACEDESC结构 invoke RtlZeroMemory,ddsd,sizeof.DDSURFACEDESC mov [ddsd.dwSize],sizeof.DDSURFACEDESC ; 取得当前的显示模式 cominvk DDraw,GetDisplayMode,ddsd retjnz ddraw_err ; 设置显示模式 cominvk DDraw,SetDisplayMode,[ddsd.dwWidth],[ddsd.dwHeight],[ddsd.ddpfPixelFormat.dwRGBBitCount] retjnz ddraw_err ; 填充主页面信息 mov [ddsd.dwFlags],DDSD_CAPS mov [ddsd.ddsCaps.dwCaps],DDSCAPS_PRIMARYSURFACE cominvk DDraw,CreateSurface,ddsd,DDSPrimary,NULL retjnz ddraw_err ; 创建该页面的设备环境句柄,该设备环境与 GDI 是兼容的 cominvk DDSPrimary,GetDC,hdc retjnz ddraw_err ; 输出文字 invoke SetBkColor,[hdc],0x000000ff invoke SetTextColor,[hdc],0x00ffff00 invoke TextOut,[hdc],[txtpoint.x],[txtpoint.y],stMsg,dwLenMsg invoke ShowWindow,[hwnd],SW_SHOWNORMAL invoke UpdateWindow,[hwnd] ;========================================= msg_loop: invoke GetMessage,msg,NULL,0,0 retjz end_loop invoke TranslateMessage,msg invoke DispatchMessage,msg jmp msg_loop end_loop: invoke ExitProcess,[msg.wParam] ddraw_err: invoke wsprintf,buff,szErrMsg,eax invoke SendMessage,[hwnd],MY_DDRAWERR,buff,szErrTitle jmp msg_loop;================================================================= proc WindowProc uses ebx esi edi, hwnd,umsg,wparam,lparam cmp [umsg],WM_DESTROY je .wmdestroy cmp [umsg],MY_DDRAWERR je .myddrawerr cmp [umsg],WM_KEYDOWN je .wmkeydown cmp [umsg],WM_PAINT je .wnpaint .defwndproc: invoke DefWindowProc,[hwnd],[umsg],[wparam],[lparam] jmp .finish .myddrawerr: invoke MessageBox,[hwnd],[wparam],[lparam],MB_OK+MB_ICONERROR invoke DestroyWindow,[hwnd] invoke PostQuitMessage,1 jmp .finish .wmkeydown: mov eax,[wparam] cmp eax,VK_ESCAPE jne .defwndproc invoke PostQuitMessage,1 jmp .finish .wnpaint: invoke TextOut,[hdc],[txtpoint.x],[txtpoint.y],stMsg,dwLenMsg jmp .finish .wmdestroy: ;cominvk DDraw,RestoreDisplayMode cominvk DDSPrimary,ReleaseDC,[hdc] cominvk DDraw,Release invoke PostQuitMessage,0 xor eax,eax .finish: retendp;------------------------------------------------------------section '.bss' readable writeable hinstance HANDLE hwnd HANDLE hdc HANDLE msg MSG point POINT txtpoint POINT ddsd DDSURFACEDESC DDraw DirectDraw DDSPrimary DirectDrawSurface buff TCHAR 256 dup (?);------------------------------------------------------------section '.data' data readable writeable szTitle TCHAR 'flat assembler DirectDraw application',0 szClass TCHAR 'FDDRAW32',0 ; DEFINE_GUID <IID_IDirectDraw7,0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b > wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_WINDOW + 1,NULL,szClass szErrTitle TCHAR 'Error',0 szPause TCHAR 'pause',0 szFmt0 TCHAR 'msgindex=%x',0ah,'%d*%d*%d %dHz',0 szErrMsg TCHAR 'ddraw_err_code=0x%x',0ah,0 stMsg TCHAR 'G-Spider @2013' dwLenMsg =($-stMsg)/sizeof.TCHAR ;------------------------------------------------------------section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ ddraw,'DDRAW.DLL',\ gdi32,'gdi32.dll' include 'api\kernel32.inc' include 'api\user32.inc' include 'api\gdi32.inc' import ddraw,\ DirectDrawCreate,'DirectDrawCreate'
- fasm DirectDraw test
- 适于fasm的DirectDraw头文件定义
- FASM
- DirectDraw
- DirectDraw
- fasm giveio
- fasm Ke386SetIoAccessMap
- FASM v 1.67.25
- FASM练习代码
- Fasm Native for Examples
- seh to fasm 研究
- Fasm-TCC BareBones
- fasm 控制台多线程示例
- 汇编开发工具 fasm
- FASM汇编编译器
- Fasm操作数据库sqlite
- fasm driver 驱动编程
- FASM源代码分析01
- JVM崩溃的原因及解决!
- mips 页表相关(tlbrefill 全解释)
- GUI-03
- C++第6周项目4 - 用点类做成员的三角形类
- mips 精确异常和延时槽
- fasm DirectDraw test
- mips 内嵌汇编
- D3.JS 基于javascript的图表展示库<五>-基本柱状图1
- 虚函数的作用
- asp.net三层架构详解
- mips 异常处理和进程切换
- 2586 How far away ?
- VC中的Sleep函数
- C++第6周项目5 - 多文件组织三角形类