我很菜,刚开始学Win32汇编,为什么不行希望能解说的详细一点,谢谢
.386
.model flat,stdcall
option casemap:none
;include 文件定义
include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
include gdi32.inc
includelib gdi32.lib
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
form equ 1000 ;窗体的ID=1000;Form=100;Equ 等值定义。(定义的是一些窗体的ID和控件的ID)
.data?;数据段
hInstance dd ? ;定义的是模块句柄的变量 未赋值后面加"?"
.code;代码段
_FormMsg proc uses ebx edi esi hWnd,wMsg,wParam,IParam
;这是一个函数定义
;_ProcWinMain:函数
;proc:伪指令,表示要声明函数了。。。
;uses ebx edi esi:USES操作符,允许列出被过程修改的所有寄存器(次过程中为ebx edi
;esi),它只是编译器做两件事,首先在过程的开始出生成PUSH指令在堆栈上保存寄存器
;其次,在过程的结束出生成POP指令恢复这些寄存器的值.
;
;hWnd,uMsg,wParam,IParam:过程的四个参数句柄,windows消息,
;WPARAM常常代表一些空间的ID或者高位低位组合起来分别表示鼠标的位置,
;如果消息的发送者需要发送另类信息的话,习惯上用LPARAM来传递
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
.else
mov eax,FALSE
.endif
ret
_FormMsg endp
start:
invoke GetModuleHandle,NULL
;GetModuleHandle 得到模块的句柄
;参数为模块的名称,比如abc.dll(也可能有.exe,不过较少)。
;如果参数为NULL,表示取当前进程(.exe)的模块句柄
;模块句柄实际上就是模块在当前进程空间的装入地址。
;exe程序装入句柄一般为0x00400000
mov hInstance,eax
invoke DialogBoxParam ,hInstance,form,NULL,offset _FormMsg,NULL
;为了避免出现错误,建议除在局部变量中引用addr外,其他场合使用offset,
;addr伪操作符只能用在 invoke 伪指令汇中
invoke ExitProcess,NULL
end start
*************************下面是RC资源文件内容**********************
#define 123 1000
123 DIALOGEX 10,10,150,100
CAPTION "IDD_DLG"
FONT 8,"MS Sans Serif",0,0,0
STYLE WS_VISIBLE|WS_OVERLAPPEDWINDOW
BEGIN
END
*************************编译信息*****************************
D:\Program Files\RadASM\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"D:\Program Files\RadASM\Masm32\Include" "尼玛.asm"
Assembling: 尼玛.asm
构建完成.
总共编译时间 265 毫秒
****************************构建信息******************************
D:\Program Files\RadASM\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"D:\Program Files\RadASM\Masm32\Include" "尼玛.asm"
Assembling: 尼玛.asm
D:\Program Files\RadASM\Masm32\Bin\LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /LIBPATH:"D:\Program Files\RadASM\Masm32\Lib" /OUT:"尼玛.exe" "尼玛.obj" "尼玛.res"
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
构建完成.
总共编译时间 375 毫秒
******************************执行信息****************************
执行:
"D:\Program Files\RadASM\Masm\Projects\尼玛\尼玛.exe"
构建完成.
总共编译时间 313 毫秒
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课