一个标准的汇编语言程序
.386
.model flat , stdcall //cs=FLAT、 ds=FLAT、 es=FLAT、 fs=ERROR、 gs=ERROR
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
include kernel32.lib
.data //数据段
szCaption db 'a MessageBox !' ,0
szText db 'Hello,World!',0
.code //代码段
start:
invoke MessageBox , NULL,offset szText, offset szCaption , MB_OK
invoke ExitProcess, NULL
end start
各段与PE文件的节区对应
.data == _DATA
.data? == _BSS
.code == _TEXT 此段默认不可写,可设置PE头部中的属性来打开可写属性
API函数的返回值类型是DWORD,存放在EAX中
函数声明 MessageBox Proto hWnd:dword , lpText:dword .....
标号 @@: -简明标号 @F - 下一个@@标号 @B - 上一个@@标号
全局变量定义在.data 或.data?节中
局部变量,子程序中的局部变量存放在堆栈中,在子程序中必须在最前面定义,定义: local lo1:byte、 local lov2[1024]:dword
结构的定义:
结构名 struct
变量名 数据类型 ?
结构名 ends
stWnd WNDCLASS <>
stWnd WNDCLASS <1,1,1,1,1,1,1,1>
mov movzx movsx
sizeof lengthof
offset addr
子程序
子程序名 proc ...
子程序名 endp
高级语法
条件测试语句
.if .else .elseif .endif
CARRY? OVERFLOW? PARITY? SIGN? ZERO?
循环语句
.whild 条件表达式
.break .if 条件
.continue
.endw
.repeat
.break .if 条件
.continue
.until 条件表达式
代码风格
b 字节 w 字 dw 双字
h 句柄 lp 指针 sz 字符串 lpsz 字符串指针 f 浮点数 st 数据结构