汇编语言-学习

来源:互联网 发布:windows 界面开发框架 编辑:程序博客网 时间:2024/04/30 12:29

一个标准的汇编语言程序



.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 数据结构