前言
正常的汇编,是可以直接运行.但是我们实际开发中,会使用许多伪指令(这里的伪指令区别于真实的指令).另外,我们需要在汇编中调用windows的函数,或者其他C/C++编写的函数.MSVC(MASM)常见的伪指令:
1. 数据定义伪指令
用于定义数据段中的变量和常量。
DB:定义字节。DW:定义字。DD:定义双字。DQ:定义四字。DT:定义十字(用于浮点数)。
2. 段定义伪指令
用于定义代码和数据段。
.data:变量定义,附带初始值.data?:变量定义,不指定初始值.const:常量定义。.code:代码段开始。.stack:定义栈段。
3. 控制结构伪指令
用于控制程序的执行流。
.if:条件语句。.endif:结束条件语句。.while:开始循环。.endw:结束循环。.repeat:重复语句。.endrep:结束重复语句。.for:开始计数循环。.endfor:结束计数循环。
4. 宏和过程伪指令
用于定义和调用宏及过程。
macro:定义宏。endm:结束宏定义。proc:定义过程。endp:结束过程定义。
6. 其他伪指令
其他一些通用的伪指令。
include:引入外部文件。includelib:引入库文件。extern:声明外部符号。option:设置编译选项(如casemap)。
环境搭建
- 下载
MASM32:www.masm32.com/download.ht… 并安装. - 新建一个空项目.右键项目
属性 -> 配置属性 -> 常规 -> 平台工具集选择vs2015
- 右键点击项目名称,选择
属性 -> 配置属性 -> VC++ 目录。
- 在 “包含目录” 中添加 MASM 的包含路径(如
C:\masm32\include)。 - 在 “库目录” 中添加 MASM 的库路径(如
C:\masm32\lib)。 - 选择
属性 -> 配置属性 -> 链接器 -> 输入 ->附加依赖项中添加所需的库(如user32.lib和kernel32.lib)。
- 在项目处,
右键 -> 生成依赖项 -> 生成自定义选择MASM
- 下载完之后,安装即可. 然后打开visual studio,新建一个空项目.在源文件,右键 添加项,手动修改后缀为asm,新建一个asm文件.
编写如下代码 调用windowsAPI 弹出框:
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.const
msg1 db 'Hello, World!', 0 ; 消息内容
title1 db 'Greeting', 0 ; 窗口标题
.code
start:
; 调用 MessageBoxA
invoke MessageBoxA, NULL, addr msg1, addr title1, MB_OK
; 退出程序
invoke ExitProcess, 0
ret
myMain proc uses ebx edi esi
invoke MessageBoxA, NULL, addr msg1, addr title1, MB_OK
invoke ExitProcess, 0
myMain endp
end myMain
运行结果如下: