Visual Studio 2022 + MASM 汇编环境配置指南

在开始下面列出的教程之前,请访问 Github 页面 (surferkip/asmbook) 下载以下文件:

  • Irvine.zip - 代码示例和所需库
  • Project32_VS2022.zip - 配置为汇编语言的样例 32 位 Visual Studio 2022 项目
  • Project64_VS2022.zip - 配置为汇编语言的样例 64 位 Visual Studio 2022 项目

32 位应用程序的必要设置

下载并安装了 VS 2022 社区版之后,并启用 Visual C++ 桌面开发。首先,确认这一组件是否已经安装。启动 Visual Studio 时,在启动窗口上点击 "创建新项目" 面板:

接下来,在 创建新项目 对话框窗口中,在最近项目模板列表中查找带有 C++ 按钮的 Console App 项目类型。

如果在列表中看不到C++,请关闭Visual Studio并运行一个名为Visual Studio Installer的单独程序。

Visual C++ 语言包含 Microsoft Assembler(MASM)。要验证是否已安装 MASM ,请打开 Windows 资源管理器窗口,查找 Visual Studio 安装目录中的名为 ml.exe 的文件,例如 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.nn.nnnn\bin\HostX64\x86 。(上述的 "n" 字符表示您当前 VS 的安装版本号。)

示例程序

在本文档的顶部,有名为 Irvine.zip 的文件的下载方式,我们需要下载这一文件,并将其提取到 C:\Irvine 文件夹中,建议不要更改路径。

C:\Irvine 文件夹应包含以下文件:

Filename Description
b16.asm, b32.asm Blank templates for 16-bit and 32-bit assembly language source files
GraphWin.inc Include file for writing Windows applications
Irvine16.inc Include file used with the Irvine16 link library (16-bit applications)
Irvine16.lib 16-bit link function library used with this book
Irvine32.inc Include file used with the Irvine32 link library (32-bit applications)
Irvine32.lib Irvine's 32-bit link library
Kernel32.lib 32-bit link library for Windows API
Link16.exe 16-bit Microsoft linker
Macros.inc Irvine's macro include file (see Chapter 10)
SmallWin.inc Small-sized include file containing MS-Windows definitions, used by Irvine32.inc
User32.lib MS-Windows basic I/O link library
VirtualKeys.inc Keyboard code definitions file, used by Irvine32.inc

名为 Examples 的子目录包含了一些示例程序、 16 位、 32 位和 64 位库的源代码,以及两个用于较早版本Visual Studio的示例项目。

配置 Visual Studio

您可以在不打开或创建项目的情况下打开 Visual Studio 。在初始启动屏幕上,选择 继续但无需代码 ,就在 创建新项目 按钮的下方。

选择 C++ 配置

Visual Studio 支持多种编程语言和应用类型。 C++ 编程语言的配置最接近汇编语言编程,因此采用以下步骤:

  1. 从菜单中选择 工具 >> 导入和导出设置
  2. 选择 "导入选定的环境设置" 单选按钮
  3. 选择 "否,仅导入新设置......" 单选按钮
  4. 从默认设置列表中选择 "Visual C++" ,然后点击下一步按钮
  5. 点击完成按钮,然后点击关闭按钮
  6. 注意 Visual Studio 工作区左右两侧的选项卡。关闭 Server Explorer 和 Toolbox 选项卡。如果将来不小心关闭了一个窗口,您可以将其恢复:从菜单中选择"查看",然后从查看菜单列表中找到窗口的名称。

教程:构建并运行一个 32 位程序

现在可以打开并构建一个 32 位项目。

打开项目

Visual Studio 要求汇编语言源文件必须属于一个 项目 ,这是一种容器。项目包含配置信息,如汇编器、链接器和所需库的位置。项目有自己的文件夹,并保存属于它的所有文件的名称和位置。

按照文章开头的说明,下载 Project32_VS2022.zip 文件并将其解压缩到您的工作目录中。它包含一个名为 AddTwo.asm 的样本 asm 测试文件。

按照以下步骤操作:

  1. 启动 Visual Studio 。
  2. 通过从 Visual Studio 菜单中选择 文件 >> 打开 >> 项目/解决方案 ,打开我们的样本 Visual Studio 项目文件。
  3. 转到您解压缩我们的项目文件的工作文件夹,并选择名为 Project.sln 的文件。
  4. 一旦项目被打开,您将在 Visual Studio 的解决方案资源管理器窗口中看到项目名称。您还应该在项目中看到一个名为 AddTwo.asm 的汇编语言源文件。双击文件名以在编辑器中打开它。

您应该在编辑器窗口中看到以下程序:

arduino 复制代码
 ; AddTwo.asm - adds two 32-bit integers.
 ; Chapter 3 example
 ​
 .386
 .model flat,stdcall
 .stack 4096
 ExitProcess proto,dwExitCode:dword
 ​
 .code
 main proc
     mov eax,5               
     add eax,6               
 ​
     invoke ExitProcess,0
 main endp
 end main

后续可以使用此文件作为创建新程序的起点。

构建程序

构建(汇编和链接)示例程序。从 生成 菜单中选择 生成 Project 。在屏幕底部的输出窗口中,您应该看到类似以下的消息,指示构建结果:

rust 复制代码
 生成开始于 20:38...
 1>------ 已启动生成: 项目: Project, 配置: Debug Win32 ------
 1>Assembling AddTwo.asm...
 1>Project.vcxproj -> D:\0_fushiProject\asmbook-main\Project32_VS2022\Debug\Project.exe
 ========== "生成": 1 成功,0 失败,0已跳过 ==========
 ========== 生成 于 20:38 完成,耗时 02.002 秒 ==========

如果您没有看到这些消息,则该项目可能自上次构建以来没有被修改。只需从 生成 菜单中选择 重新生成 Project

调试程序

首先设置一个断点。在程序中设置好断点后,您可以使用调试器全速执行( run )程序,直到达到断点。在那一点上,调试器将进入单步执行模式。具体操作步骤如下:

  1. 确保 ASM 源代码文件在编辑器窗口中打开。
  2. mov eax,5 语句左侧的边框单击鼠标,边框上应该出现一个大红点。
  3. 从调试菜单中选择"开始调试"。程序运行到带有断点的行上暂停。(可选地,您可以关闭"诊断工具"、"自动"和"调用堆栈"窗口。)
  4. 逐步执行代码时程序输出会显示在控制台窗口中。
  5. 按下 F10 键以执行当前语句。继续按 F10 ,直到程序即将执行 invoke 语句。 再按一次 F10 以结束程序。

在暂停时,您的程序将如下所示:

寄存器

在调试程序时, CPU 寄存器中的值非常重要的。要想能看到它们的值,

  1. 首先,在"工具 >> 选项"菜单下,选择左侧的"调试",然后选择"启用地址级调试"。
  2. 接下来,在源代码中的可执行语句上设置一个断点,以调试模式运行程序。
  3. 从调试菜单中选择"窗口",然后从下拉列表中选择"寄存器"。

寄存器窗口会停靠在 Visual Studio 工作区,还可以在寄存器窗口中显示 CPU 标志,在寄存器窗口内右键单击并在弹出菜单中选中"标志"即可。

在调试菜单中选择"停止调试"可以中断调试会话,在工具栏上单击红色方块按钮也可以。要从程序中删除断点,请单击红点使其消失。

相关推荐
邓校长的编程课堂6 小时前
在Visual Studio中使用CMakeLists.txt集成EasyX库的详细指南
visual studio·少儿编程·easyx·信息学奥赛·图形化编程·趣味编程
yufei-coder1 天前
C# Windows 窗体开发基础
vscode·microsoft·c#·visual studio
山语山1 天前
C语言——文件读写操作
java·c语言·前端·microsoft·visual studio
十画_8242 天前
Visual Studio 字体与主题推荐
ide·visual studio
中游鱼2 天前
Visual Studio C# 编写加密火星坐标转换
kotlin·c#·visual studio
十画_8242 天前
Visual Studio 小技巧记录
unity·visual studio
.jc72 天前
C/C++/EasyX ——入门图形编程(2)
c语言·c++·visual studio
tekin3 天前
macos vscode+dosbox 8086汇编语言开发调试环境搭建方法 包含所有相关的工具的下载和安装配置方法
macos·dos·汇编语言·dosbox·tasm·汇编语言开发环境
yufei-coder3 天前
深入理解 C# 中的集合与数据结构
windows·vscode·c#·visual studio
yufei-coder3 天前
掌握 C# 文件和输入输出操作
windows·c#·.netcore·visual studio