hello world

.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 

原文地址:https://www.cnblogs.com/nanfengnan/p/13894367.html