CharacterHusban 发表于 2013-8-4 20:47:19

看段代码刚学win32第一个窗口程序编译错误提示 指令必须在控制块

                .386
                .model flat,stdcall
                option casemap:none
;include 文件定义-------------------------------------
include                windows.inc
include                gdi32.inc
includelib        gdi32.lib
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
;-----------------------------------------------------
;数据段-----------------------------------------------
                .data?
hInstance        dd        ?
hWinMain        dd        ?


                .const
szClassName        db        'MyClass',0
szCaptionMain        db        'MyFirstWindow!',0
szText                db        'Win32 powerful!',0

;代码段---------------------------------------------
                .code

_ProcWinMain        proc uses ebx edi esi,hWnd,uMsg,wParam,LParam
                local @stPs:PAINTSTRUCT
                local @stRect:RECT
                local @hDc


                mov        eax,uMsg
               
                .if        eax ==        WM_PAINT
                        invoke        BeginPaint,hWnd,addr @stPs
                        mov        @hDc,eax

                        invoke        GetClientRect,hWnd,addr @stRect
                        invoke        DrawText,@hDc,addr szText,-1,addr @stRect,DT_SINGLELINE or DT_CENTER or DT_VCENTER

                        invoke        EndPaint,hWnd,addr @stPs

                .elseif        eax==WM_CLOSE
                        invoke        DestroyWindow,hWinMain
                        invoke        PostQuitMessage,NULL

                .else       
                        invoke        DefWindowProc,hWnd,uMsg,wParam,LParam
                        ret
                .endif

                xor        eax,eax
                ret

_ProcWinMain        endp

_WinMain        proc
                local        @stWndClass:WNDCLASSEX
                local        @stMsg:MSG

                invoke        GetModuleHandle,NULL
                mov        hInstance,eax
                invoke        RtlZeroMemory,addr @stWndClass,sizeof @stWndClass

;注册窗口类

                invoke        LoadCursor,0,IDC_ARROW
                mov        @stWndClass.hCursor,eax
                push        hInstance
                pop        @stWndClass.hInstance
                mov        @stWndClass.cbSize,sizeof WNDCLASSEX
                mov        @stWndClass.style,CS_HREDRAW or CS_VREDRAW
                mov        @stWndClass.lpfnWndProc,offset _ProcWinMain
                mov        @stWndClass.hbrBackground,COLOR_WINDOW + 1
                mov        @stWndClass.lpszClassName,offset szClassName
                invoke        RegisterClassEx,addr @stWndClass

;建立并显示窗口类

                invoke CreateWindowEx,WS_EX_CLIENTEDGE,\
                offset szClassName,offset szCaptionMain,\
                WS_OVERLAPPEDWINDOW,\
                100,100,600,400,\
                NULL,NULL,hInstance,NULL
                mov        hWinMain,eax
                invoke        ShowWindow,hWinMain,SW_SHOWNORMAL
                invoke        UpdateWindow,hWinMain


;消息循环
                .while        TRUE
                        invoke        GetMessage,addr @stMsg,NULL,0,0
                        .break       
                        .if eax == 0
                        invoke        TranslateMessage,addr @stMsg
                        invoke        DispatchMessage,addr @stMsg
               
                .endw
                ret

_WinMain        endp

start:
                call        _WinMain
                invoke        ExitProcess,NULL

                end        start


1236 发表于 2013-8-5 14:30:49

看的好乱啊 ,你如果发布出来程序,还可以调试下

relaxpeng 发表于 2013-8-5 19:59:16

楼主这是那个意思

小甲鱼 发表于 2013-8-7 10:58:30

{:5_94:}想问的是什么问题呢?
页: [1]
查看完整版本: 看段代码刚学win32第一个窗口程序编译错误提示 指令必须在控制块