.386 ;指令集
.model flat,stdcall ;工作模式 win32工作模式只用flat平坦
option casemap:none ;格式
;include文件定义
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;数据段
.data ;用来放已经定义并且初始化了的变量
szCaption db 'A MessageBox !',0
szText db 'Hello World !',0
.data? ;用来放未定义的变量
.const ;放定义完的常量
;代码段定义
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NULL
end start
寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中会默认使用它,其它情况很少使用到,暂时可以不用理会。
EAX是WIN32 API 默认的返回值存放处。
ECX是LOOP指令自动减一的寄存器。
ESP是堆栈指针。
EBP经常用来在堆栈中寻址。
ESI好像常常用在指针寻址中,EDI
ptr 显式指定后面的数据的类型
offset 全局变量的地址
lea 求局部变量地址
addr 局部变量的地址,也可以用在全局变量上
local 定义局部变量
proc 定义子程序
proto 声明子程序
数据类型:
名称 简写 长度(字节)
byte db 1 ;无符号字节
word dw 2
dword dd 4
fword df 6 ;三字
qword dq 8 ;四字
sbyte 1 ;有符号字节
sword 2 ;有符号字
sdword 4 ;有符号双字
real4 4 ;单精度浮点数
real8 8 ;双精度浮点数
real10 10 ;10字节浮点数
tbyte dt 10 ;十字节bcd码
;定义局部变量 local变量必须紧在子程序定义之后,因为局部变量在子程序未执行时就要确定下来
local 变量名[[重复数量]][:类型]
eg: local ff[1024]:byte