博客地址:黑境-aak1247的博客
###工具选择
目前发现RadASM比较好用,代码补全和高亮好评,可以修改配色。
###helloworld与基本框架
.386
.model flat, stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
szCaption db 'Hi', 0
szMsg db 'Hello World!', 0
.code
start:
invoke MessageBox, NULL, addr szMsg, addr szCaption, MB_OK
invoke ExitProcess, NULL
end start
.386指定指令集,类似的还有.8086(dos汇编下的默认指令集),.186,.286,.386/.386p,.486/.486p,.586/.586p。带p的伪指令表示程序中可以使用特权指令。
如果要在程序中使用MMX指令进行图像处理,还需要加上.MMX伪指令,如:
.586
.mmx
.model指定内存模式,win32下只有flat一种,所有的数据和代码都位于4GB的一个段中。如果定义了.model flat,MASM会自动为段寄存器进行如下定义:
ASSUME cs:flat,ds:flat,ss:flat,es:flat,fs:error,gs:error
即默认不使用fs和gs寄存器,如果在程序中进行使用就会得到一个错误。要使用的话可以显示地指定fs:nothing或fs:flat,这样就可以把这个错误留给有需要的人。
option语句的选项不少,不过常用的只有casemap:none这一个选项,用于指定大小写敏感。因为windows API 是区分大小写的,不打开的话出问题的概率会比较大。
简化段伪指令的格式如下表:
简化段伪指令 | 功 能 | 注释 |
---|---|---|
.CODE [段名] | 创建一个代码段 | 段名为可选项,如不给出段名,则采用默认段名。对于多个代码段的模型,则应为每个代码段指定段名。 |
ctrl+F5构建并运行此程序。
##done