📄 last.asm
字号:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include gdi32.inc
includelib kernel32.lib
includelib user32.lib
includelib gdi32.lib
include comdlg32.inc
includelib comdlg32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
PushButton PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
LoadBmp1234 proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM
m2m macro x,y
push y
pop x
endm
.data
ClassName db "Project Class",0
AppName db "图显示程序(汇编语言编写)",0
hInstance dd 0
CommandLine dd 0
hBmp dd 0
.data
ofn OPENFILENAME <>
.const
Tet db "Test",0
lpFilter db "位图文件",0,"*.bmp",0,0
lpFile db 200 dup(0)
lpTitle db "请选择位图文件",0
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke LoadBitmap,hInstance,200
mov hBmp,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
WinMain proc hInst:HINSTANCE,hPre:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
local wc:WNDCLASSEX
local msg:MSG
local hwnd:HWND
mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,0
mov wc.cbWndExtra,0
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+2
mov wc.lpszClassName,offset ClassName
mov wc.lpszMenuName,offset AppName
invoke LoadCursor,NULL,IDC_CROSS
mov wc.hCursor,eax
invoke LoadIcon,NULL,IDI_WINLOGO
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke RegisterClassEx,addr wc
invoke CreateWindowEx,WS_EX_LEFT,offset ClassName,offset AppName,WS_OVERLAPPEDWINDOW,200,200,700,600,NULL,NULL,hInst,NULL
mov hwnd,eax
invoke ShowWindow,hwnd,CmdShow
invoke UpdateWindow,hwnd
.while 1
invoke GetMessage,addr msg,NULL,0,0
.break .if (!eax)
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
.endw
mov eax,msg.wParam
ret
WinMain endp
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
local hDC:DWORD
local memDC:DWORD
local hOld:DWORD
local t1:DWORD
local t2:DWORD
local t3:DWORD
.if uMsg==WM_CLOSE
invoke PostQuitMessage,NULL
.elseif uMsg==WM_PAINT
invoke GetDC,hWnd
mov hDC,eax
invoke CreateCompatibleDC,hDC
mov memDC,eax
invoke SelectObject,memDC,hBmp
mov hOld,eax
invoke BitBlt,hDC,10,10,600,340,memDC,0,0,SRCCOPY
invoke SelectObject,hDC,hOld
invoke DeleteDC,memDC
xor eax,eax
ret
.elseif uMsg == WM_CREATE
szText RunIt,"<-Left"
invoke PushButton,ADDR RunIt,hWnd,40,500,70,25,500
szText Rght,"Right->"
invoke PushButton,addr Rght,hWnd,130,500,70,25,501
szText Up,"UP^"
invoke PushButton,addr Up,hWnd,84,450,70,25,502
szText Down,"Downv"
invoke PushButton,addr Down,hWnd,84,540,70,25,503
szText xx9,"OpenTest"
invoke PushButton,addr xx9,hWnd,220,500,70,25,504
.elseif uMsg==WM_COMMAND
.if wParam==500
invoke GetDC,hWnd
mov hDC,eax
invoke LoadBmp1234,hDC,10,10,600,380,1
ret
.elseif wParam==501
invoke GetDC,hWnd
mov hDC,eax
invoke LoadBmp1234,hDC,10,10,600,380,2
ret
.elseif wParam==502
invoke GetDC,hWnd
mov hDC,eax
invoke LoadBmp1234,hDC,10,10,600,380,3
ret
.elseif wParam==503
invoke GetDC,hWnd
mov hDC,eax
invoke LoadBmp1234,hDC,10,10,600,380,4
ret
.elseif wParam==504
mov ofn.lStructSize,sizeof ofn
m2m ofn.hwndOwner,hWnd
m2m ofn.hInstance,hWnd
mov ofn.lpstrFilter,offset lpFilter
mov ofn.lpstrFile,offset lpFile
mov ofn.lpstrTitle,offset lpTitle
mov ofn.nMaxFile,200
mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER
invoke GetOpenFileName,offset ofn
ret
.endif
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
PushButton proc lpText:DWORD,hParent:DWORD,
a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD
local hwnd:HWND
szText btnClass,"BUTTON"
invoke CreateWindowEx,0,
ADDR btnClass,lpText,
WS_CHILD or WS_VISIBLE,
a,b,wd,ht,hParent,ID,
hInstance,NULL
ret
PushButton endp
LoadBmp1234 proc hDC:dword,a:dword,b:dword,wd:dword,ht:dword,flag:dword
local memDC:dword
local hOld:dword
local t1:dword
local t2:dword
local t3:dword
invoke CreateCompatibleDC,hDC
mov memDC,eax
invoke SelectObject,memDC,hBmp
mov hOld,eax
mov ebx,flag
and bx,1
.if bx
mov t1,0
.else
mov t1,500
.endif
l6:
mov t2,900
l4:
mov t3,900
l2:
dec t3
cmp t3,0
je l1
jmp l2
l1:
dec t2
cmp t2,0
je l3
jmp l4
l3:
.if flag>2
invoke BitBlt,hDC,a,b,wd,ht,memDC,0,t1,SRCCOPY
.else
invoke BitBlt,hDC,a,b,wd,ht,memDC,t1,0,SRCCOPY
.endif
.if bx
inc t1
cmp t1,500
.else
dec t1
cmp t1,0
.endif
je l5
jmp l6
l5:
invoke SelectObject,hDC,hOld
invoke DeleteDC,memDC
ret
LoadBmp1234 endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -