本文主要为了记录masm汇编的编译、连接指令的,因为平时也不怎么用汇编但用的时候我总是想不起来。先来个示例程序:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib kernel32.lib
.data
sum dd 0
.code
start:
mov eax, 0
label1:
add sum, eax
inc eax
cmp eax, 10
jb label1
label2:
invoke ExitProcess, NULL
end start
这里编译的时候要注意,因为这里引用了头文件和lib文件,所以需要设置环境变量include和lib到masm32目录下的include和lib,或者直接在源文件里写绝对路径,最好设置masm32/bin到path变量。
ml /c /coff hello.asm
link /SUBSYSTEM:WINDOWS hello.obj
ml 为编译命令,/c 是仅编译不连接,/coff是编译为coff格式的目标文件。
link 为连接命令,/SUBSYSTEM:WINDOWS 指定为窗口程序
先看开头这些命令:
.386
.model flat,stdcall
option casemap:none
.386 指定处理器构架在.386以上,.model指定编译模式为flat平坦模式,casemap:none选项表明程序大小写敏感。
.data 指定数据段 .code指定代码段。
start 为程序开始指定一个符号
end start 指明程序就此结束,并指定程序入口为start