《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境 + 相关参考

下载 Visual Studio Installer

链接见本文底部
在这里插入图片描述

安装 Visual Studio 2019

1. 双击运行

在这里插入图片描述

2. 自定义安装内容

看的懂就按需设置,看不懂的不动就行了。一路确认下去。
注意:可根据自己需要,调整 安装位置
在这里插入图片描述

3. 修改 MSVC 工具集版本

我这里走了弯路。一开始默认装了最新版,编译时报错。
网上查了是版本不匹配造成的:MASM32 SDK Version 11 需要 MSVC v14.26.x
然后再次运行 Visual Studio Installer 修改:
在这里插入图片描述
如果想省空间,可以去掉其它版本的生成工具,只保留我们要的这个就行了。
在这里插入图片描述

4. 设置主题(可选)

  • 首次启动可以选择
    在这里插入图片描述
  • 后续修改

在这里插入图片描述

5. 安装代码高亮插件 AsmDude(可选)

主菜单 > 扩展 > 管理扩展
在这里插入图片描述
下载完成后关闭 VS 才会开始安装插件。一路确认点下去即可。
完成后再次打开VS继续后续工作。

主菜单 > 工具 > 选项 (可根据需要自定义)
在这里插入图片描述

6. 通义灵码(可选)

TONGYI Lingma
在这里插入图片描述
打开智能问答我喜欢扡到右边。
在这里插入图片描述

MASM32

在创建和配置项目前,我们先安装 MASM32 SDK

安装 masm32

到这里下载安装即可 http://www.masm32.com/download.htm
也可以见本文底部
在这里插入图片描述
我安装在了 C:\masm32
在这里插入图片描述

创建项目

从启动窗口创建项目

在这里插入图片描述

从主菜单创建

也可以直接热键 Ctrl + Shift + N
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 解决方案、项目目录:
    在这里插入图片描述

配置项目 32位汇编

1. 项目设置:生成依赖项

在这里插入图片描述

2. 创建 HelloWorld.asm

热键:Ctrl + Shift + A
注意:要创建 asm文件后,项目配置中才会显示Microsoft Macro Assembler
在这里插入图片描述

弹窗 HelloWorld.asm

.386                         ; 指定目标架构为 x86
.model flat, stdcall         ; 使用平坦内存模型和平坦调用约定 (stdcall)

option casemap: none         ; 开启大小写敏感模式,标识符将区分大小写

include windows.inc          ; 包含 Windows API 头文件,定义了 API 函数原型和常量
include kernel32.inc         ; 包含 Kernel32 API 的头文件
include user32.inc           ; 包含 User32 API 的头文件

includelib kernel32.lib      ; 链接 Kernel32 库,提供 Kernel32 API 函数的实际代码
includelib user32.lib        ; 链接 User32 库,提供 User32 API 函数的实际代码

.data                        ; 数据段开始
szCaption   db  "Hello World", 0	                    			; 弹窗标题
szText      db  "大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!", 0		; 弹窗内容

.code                        ; 代码段开始
main PROC                 	 ; 定义一个过程,名为 main
    INVOKE MessageBox, NULL, addr szText, addr szCaption, MB_OK		; 调用 MessageBox 函数
    INVOKE ExitProcess, 0    ; 调用 ExitProcess 函数,结束进程,参数为进程的退出码,这里是0
main ENDP                    ; main 过程结束
END main                     ; 指定 main 为程序的入口点

MessageBox 函数
参数一:NULL,表示没有父窗口句柄
参数二:szText,指向显示文本的地址
参数三:szCaption,指向窗口标题的地址
参数四:MB_OK,表示这是一个只包含确定按钮的消息框

在这里插入图片描述

  • 可直接用命令生成并运行
@echo off
set "MASM32_PATH=C:\masm32"
set "PATH=%MASM32_PATH%\bin;%PATH%"
set "LIB=%MASM32_PATH%\lib;%LIB%"
set "INCLUDE=%MASM32_PATH%\include"

ml.exe /c /coff /I "%INCLUDE%" /Fo"HelloWorld.obj" /Fl"HelloWorld.lst" HelloWorld.asm
link.exe /SUBSYSTEM:WINDOWS /ENTRY:main HelloWorld.obj /OUT:"HelloWorld.exe" kernel32.lib user32.lib

HelloWorld.exe

在这里插入图片描述

命令行 HelloWorld.asm

.386                           ; 指定目标架构为 x86
.model flat, stdcall           ; 使用平坦内存模型和平坦调用约定 (stdcall)
option casemap: none           ; 开启大小写敏感模式,标识符将区分大小写

include kernel32.inc           ; 包含 Windows API 头文件
includelib kernel32.lib        ; 链接 Kernel32 库

include masm32.inc             ; 包含 MASM32 头文件,提供了 StdOut 和 ReadKey 宏
includelib masm32.lib          ; 链接 MASM32 库,提供 StdOut 和 ReadKey 宏的实现

.data
msg db "大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!", 0 ; 终止符 '\0' 对字符串很重要

.code
start:
    ; 调用 StdOut 宏输出 msg
    push offset msg            ; 将 msg 压栈传参,StdOut 宏需要一个字符串指针
    call StdOut                ; 调用 StdOut 宏输出字符串

    ; 结束程序
    push 0                     ; 将退出代码 0 压入栈
    call ExitProcess           ; 调用 ExitProcess 函数结束进程
end start                      ; 结束程序入口点
  • 用命令生成并运行
@echo off
set "MASM32_PATH=C:\masm32"
set "PATH=%MASM32_PATH%\bin;%PATH%"
set "LIB=%MASM32_PATH%\lib;%LIB%"
set "INCLUDE=%MASM32_PATH%\include"

ml.exe /c /coff /I "%INCLUDE%" HelloWorld.asm
link.exe /SUBSYSTEM:CONSOLE HelloWorld.obj

HelloWorld.exe
pause

在这里插入图片描述

接下来配置IDE环境:

3. 项目设置:链接器 > 附加库目录

项目右键 > 属性 (Alt + F7) > 链接器 > 常规 > 附加库目录
= C:\masm32\lib;%(AdditionalLibraryDirectories)
在这里插入图片描述

4. 项目设置:MS宏汇编 > 包含路径 Include Paths

项目属性 (Alt + F7) > Microsoft Macro Assembler > General > Include Paths
= C:\masm32\include;%(IncludePaths)
在这里插入图片描述
注意:要创建了 HelloWorld.asm 后,项目属性中才会出现 Microsoft Macro Assembler
如果没显示Microsoft Macro Assembly 可以先移除 我们创建的 asm 文件,再重新添加 试试。

4.1 项目设置:MS宏汇编 > 列表文件(可选)

$(ProjectName).lst
在这里插入图片描述
输出了列表文件,调试分析时有用
在这里插入图片描述

5. 项目设置:MSVC 工具集版本

项目右键 > 属性 > 属性配置 > 高级 > MSVC 工具集版本
在这里插入图片描述

配置项目 64位汇编

1. 创建样式表

先创建一个 PropertySheet_64.props 步骤参考:项目属性表
64位项目需要设置两个地方:

2. 连接器 > 入口点

连接器 > 高级 >入口点 (64位的程序代码中不设置入口点,这里直接设置)在这里插入图片描述

3. MS宏汇编 > 包含路径 Include Paths

Microsoft Macro Assembler > General > Include Paths = C:\Irvine
在这里插入图片描述
C:\Irvine 是由书作者提供的 Irvine.zip 放在官网。链接见本文底部参考资料
我直接解压到C盘使用。

运行

主菜单 > 调试 >开始执行(不调试)(H)
热键:Ctrl+F5

在这里插入图片描述

设置启动项目

当创建多个项目时,每个都要进行项目设置。(想批量设置项目属性见:项目属性表
运行前,需要设置其中一个为启动项目

  • 方式一(选哪个,启动哪个)
    在这里插入图片描述
  • 方式二(指定好一个启动项)
    在这里插入图片描述
    快速切换:
    在这里插入图片描述

项目属性表

我们可以利用 项目属性表 来实现多个项目共享属性
思路是创建一个 项目属性表 然后所有项目都添加它,以后改项目属性就只要改这个 项目属性表 就行了。

主菜单 > 视图 >属性管理器

  1. 随便选一个项目,然后创建 属性表
    在这里插入图片描述
  2. 双击 PropertySheet 它就是刚才创建的 属性表
    按前文介绍设置项目属性,保存E:\masm32\MasmDemo\PropertySheet.props 就有内容了
    在这里插入图片描述
    PropertySheet.props 实际上是个 XML 文件。(这么看来其实我们也可以手动创建)
    属性表 内容如下。(不在属性表中的属性还是需要去手动设置的。比如:MSVC工具集版本)
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup />
  <ItemDefinitionGroup>
    <Link>
      <AdditionalLibraryDirectories>C:\masm32\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
    <MASM>
      <IncludePaths>C:\masm32\include;%(IncludePaths)</IncludePaths>
      <AssembledCodeListingFile>$(ProjectName).lst</AssembledCodeListingFile>
    </MASM>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>
  1. 选中有需要的项目添加 现有属性表 PropertySheet.props
    在这里插入图片描述
    如果有的项目添加后无效,如下尝试:
    • 没加载对?可以先从项目中移除刚添加的 PropertySheet.props保存解决方案,重启VS,再重新添加一次。
    • 项目级别的属性之前被手动设置过。所以将其改为<从父级或项目默认设置继承>属性表 PropertySheet.props 的值就出现了。
      在这里插入图片描述
      应用后,我们可以查看一下,这里的值是继承来的。
      在这里插入图片描述

参考资料

笑虾:下载 Visual Studio 2019 Installer + MSAM32v11r
MS:下载 Visual Studio 2019

MS:安装 Visual Studio
MS:创建 Visual Studio 的脱机安装包以进行本地安装
MS:Visual Studio Professional 组件目录 用于查组件ID
MS:Windows C++ 项目属性页参考

Irvine.zip:书作者提供链接
Irvine.zip:笑虾提供链接

Getting Started with MASM and Visual Studio 2019

英特尔® 64 和 IA-32 架构软件开发人员手册 2A、2B、2C 和 2D 卷合并:指令集参考,A-Z
英特尔® 64 和 IA-32 体系结构软件开发人员手册 合并卷:1、2A、2B、2C、2D、3A、3B、3C、3D 和 4

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑虾

多情黯叹痴情癫。情癫苦笑多情难

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值