1. 程式人生 > >一個15歲少年寫的彙編程式碼

一個15歲少年寫的彙編程式碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

看上去,好像抄書的!!!!!

 

.386
.model flat, stdcall
option casemap:none

include /masm32/include/windows.inc
include /masm32/include/kernel32.inc
include /masm32/include/user32.inc
include /masm32/include/gdi32.inc

includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/user32.lib
includelib /masm32/lib/gdi32.lib

    return MACRO arg
        mov eax, arg
        ret
    ENDM
    m2m MACRO m1, m2
        push m2
        pop m1
    ENDM
    WinMain PROTO :DWORD, :DWORD, :DWORD, :DWORD
    WndProc PROTO :DWORD, :DWORD, :DWORD, :DWORD
.data
    szClsName   db "mycls", 0
    szWndName   db "My window", 0
    szFormat    db "= %0X =", 0
.data?
    hInstance HINSTANCE ?
.code
start:
    invoke GetModuleHandle, NULL
    mov hInstance, eax
    invoke WinMain, hInstance, NULL, NULL, SW_SHOWDEFAULT
    invoke ExitProcess, eax

WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORD
    LOCAL wc        :WNDCLASSEX
    LOCAL hWnd      :HWND
    LOCAL msg       :MSG

    mov wc.cbSize, SIZEOF WNDCLASSEX
    mov wc.style, CS_HREDRAW OR CS_VREDRAW
    mov wc.cbWndExtra, 0
    mov wc.cbClsExtra, 0
    mov wc.lpfnWndProc, OFFSET WndProc
    mov wc.lpszMenuName, NULL
    mov wc.lpszClassName, OFFSET szClsName
    invoke LoadIcon, hInst, IDI_APPLICATION
    mov wc.hIcon, eax
    mov wc.hIconSm, eax
    invoke LoadCursor, NULL, IDC_ARROW
    mov wc.hCursor, eax
    m2m wc.hInstance, hInst
    mov wc.hbrBackground, COLOR_WINDOW
    invoke RegisterClassEx, ADDR wc
    invoke CreateWindowEx, WS_EX_OVERLAPPEDWINDOW,
                            ADDR szClsName,
                            ADDR szWndName,
                            WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT, 0,
                            CW_USEDEFAULT, 0,
                            NULL, NULL, hInst, NULL

    mov hWnd, eax
    invoke ShowWindow, hWnd, CmdShow
    invoke UpdateWindow, hWnd

    StartLoop:
        invoke GetMessage, ADDR msg, NULL, 0, 0
        cmp eax, 0
        je ExitLoop
        invoke TranslateMessage, ADDR msg
        invoke DispatchMessage, ADDR msg
        jmp StartLoop
    ExitLoop:
    mov eax, msg.wParam
    ret
WinMain endp

WndProc proc hWnd:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
    LOCAL hDC       :HDC
    LOCAL ps        :PAINTSTRUCT
    LOCAL szBuf[128]:BYTE
    .if uMsg == WM_DESTROY
        invoke PostQuitMessage, 0
    .elseif uMsg == WM_PAINT
        invoke wsprintf, ADDR szBuf, ADDR szFormat, 0ffffh
        invoke BeginPaint, hWnd, ADDR ps
        mov hDC, eax
        invoke lstrlen, ADDR szBuf
        invoke TextOut, hDC, 10, 10, ADDR szBuf, eax
        invoke EndPaint, hWnd, ADDR ps
    .elseif uMsg == WM_CREATE
        ret
    .endif
    invoke DefWindowProc, hWnd, uMsg, wParam, lParam
    ret
WndProc endp
end start

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述