《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境
安装 Visual Studio 2019 配置 MASM环境
- 下载 Visual Studio Installer
- 安装 Visual Studio 2019
- 1. 双击运行
- 2. 自定义安装内容
- 3. 修改 MSVC 工具集版本
- 4. 设置主题(可选)
- 5. 安装代码高亮插件 AsmDude(可选)
- 6. 通义灵码(可选)
- MASM32
- 安装 masm32
- 创建项目
- 从启动窗口创建项目
- 从主菜单创建
- 配置项目
- 1. 项目设置:生成依赖项
- 2. 创建 HelloWorld.asm
- 弹窗 **HelloWorld.asm**
- 命令行 **HelloWorld.asm**
- 3. 项目设置:链接器 > 附加库目录
- 4. 项目设置:MS宏汇编 > 包含路径
- 4.1 项目设置:MS宏汇编 > 列表文件(可选)
- 5. 项目设置:MSVC 工具集版本
- 运行
- 设置启动项目
- 参考资料
下载 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



- 解决方案、项目目录:

配置项目
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 ; 定义一个过程,名为 mainINVOKE 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.libHelloWorld.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 宏输出 msgpush 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.objHelloWorld.exe
pause

接下来配置IDE环境:
3. 项目设置:链接器 > 附加库目录
项目右键 > 属性 (Alt + F7) > 链接器 > 常规 > 附加库目录
= C:\masm32\lib;%(AdditionalLibraryDirectories)

4. 项目设置:MS宏汇编 > 包含路径
项目属性 (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 工具集版本

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

设置启动项目
当创建多个项目时,每个都要进行上面的项目设置。
运行前,需要设置其中一个为启动项目
- 方式一(选哪个,启动哪个)

- 方式二(指定好一个启动项)

快速切换:

参考资料
笑虾:下载 Visual Studio 2019 Installer + MSAM32v11r
MS:下载 Visual Studio 2019
MS:安装 Visual Studio
MS:创建 Visual Studio 的脱机安装包以进行本地安装
MS:Visual Studio Professional 组件目录 用于查组件ID
MS:Windows C++ 项目属性页参考
Getting Started with MASM and Visual Studio 2019
相关文章:
《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境
安装 Visual Studio 2019 配置 MASM环境 下载 Visual Studio Installer安装 Visual Studio 20191. 双击运行2. 自定义安装内容3. 修改 MSVC 工具集版本4. 设置主题(可选)5. 安装代码高亮插件 AsmDude(可选)6. 通义灵码(…...
Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析
Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析 简介 本文档适用于合宙Air780E、Air780EP、Air780EQ、Air201 关联文档和使用工具: 从Ramdump里分析内存泄漏问题 无法抓底层log的情况下如何导出死机dump Luatools下载调试工具 EPAT抓取底层日志 F…...
前端经验:使用sheetjs导出CSV文本为excel
应用场景 很多web表格组件没有提供直接的导出excel功能,但提供了导出CSV的功能。 如果能想办法拿到CSV的内容,就可以利用sheetjs生成excel并导出。 实施步骤 1.拿到CSV的内容字符 每种表格组件都有各自的CSV生成方法,不管用什么方法&…...
【nnUNetv2进阶】十五、nnUNetv2 魔改网络-小试牛刀-引入ECA
nnunet使用及改进教程。 【nnUNetv2实践】一、nnUNetv2安装 【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程 【nnUNetv2进阶】三、nnUNetv2 自定义网络-发paper必会-CSDN博客 其他网络改进参考: 【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入…...
centos(或openEuler系统)安装kafka集群
安装192.168.9.60、192.168.9.61、192.168.9.62这3台kafka集群(kraft模式,不用zookeeper) 不带密码的 1.每台机器安装kafka: cd /home/kafka wget https://downloads.apache.org/kafka/3.3.1/kafka_2.13-3.3.1.tgz 不通就换这…...
HarmonyOS根据官网写案列~ArkTs从简单地页面开始
Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…...
GraphRAG+ollama+LM Studio+chainlit
这里我们进一步尝试将embedding模型也换为本地的,同时熟悉一下流程和学一些新的东西 1.环境还是用之前的,这里我们先下载LLM 然后你会在下载nomic模型的时候崩溃,因为无法搜索,无法下载 解决办法如下lm studio 0.2.24国内下载…...
【中项第三版】系统集成项目管理工程师 | 第 5 章 软件工程② | 5.4 - 5.8
前言 第 5 章对应的内容选择题和案例分析都会进行考查,这一章节属于技术的内容,学习要以教材为准。 目录 5.4 软件实现 5.4.1 软件配置管理 5.4.2 软件编码 5.4.3 软件测试 5.5 部署交付 5.5.1 软件部署 5.5.2 软件交付 5.5.3 持续交付 5.5.4…...
6. dolphinscheduler-3.0.0伪集群部署
环境说明: 主机名:cmc01为例 操作系统:centos7 安装部署软件版本部署方式centos7zookeeperzookeeper-3.4.10伪分布式hadoophadoop-3.1.3伪分布式hivehive-3.1.3-bin伪分布式clickhouse21.11.10.1-2单节点多实例dolphinscheduler3.0.0单节…...
防火墙内容安全综合实验
一、实验拓扑 二、实验要求 1,假设内网用户需要通过外网的web服务器和pop3邮件服务器下载文件和邮件,内网的FTP服务器也需要接受外网用户上传的文件。针对该场景进行防病毒的防护。 2,我们需要针对办公区用户进行上网行为管理,要…...
常见的数据分析用例 —— 信用卡交易欺诈检测
文章目录 引言数据集分析1. 读入数据并快速浏览2.计算欺诈交易占数据集中交易总数的百分比3. 类别不平衡对模型的影响3.1 总体思路(1)数据的划分(2)训练模型(3)测试模型(4)解决不平衡…...
IP地址:由电脑还是网线决定?
IP地址:由电脑还是网线决定? 在互联网时代,IP地址是我们进行网络通信的基础。然而,对于IP地址究竟是由电脑决定还是由网线决定的问题,不少人可能存在疑惑。本文将从IP地址的定义、分配方式以及影响因素等方面进行探讨…...
如何定位及优化SQL语句的性能
在数据库管理和优化中,定位并解决SQL语句的性能问题是至关重要的。MySQL通过EXPLAIN命令提供了强大的工具来查看SQL语句的执行计划,这是定位性能瓶颈和优化SQL语句的首要步骤。以下是如何利用执行计划来定位及优化SQL语句性能问题的详细指南。 一、使用…...
SentenceTransformers (SBERT)
文章目录 一、关于 SBERT特点预训练模型应用实例 二、安装开发设置 三、入门使用四、训练五、Cross Encoder 一、关于 SBERT 官方文档:https://www.sbert.net/github : https://github.com/UKPLab/sentence-transformerspaper : Sentence-BERT: Sentence Embedding…...
第三届智能机械与人机交互技术学术会议(IHCIT 2024)
【北航主办丨本届SPIE独立出版丨已确认ISSN号】 第三届智能机械与人机交互技术学术会议(IHCIT 2024) 2024 3rd International Conference on Intelligent Mechanical and Human-Computer Interaction Technology 2024年7月27日----中国杭州࿰…...
图的访问(C++)
题目描述 给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点。 输入格式 第 1 行 2 个整数 N,M,表示点数和边数。 接下来 M 行,每行 2 个整数 Ui,Vi,表…...
LeetCode做题记录(第二天)169. 多数元素
题目:169. 多数元素 标签:数组 哈希表 分治 计数 排序 题目信息: 思路一: 在题目中出现了计数,那我们就可以直接考虑考虑使用哈希表 unordered_map 即遍历的时候记录每个数的出现次数,当出现次数大于n/…...
Adobe XD中文设置指南:专业设计师的现场解答
Adobe XD是世界领先的在线合作UI设计工具。它摆脱了Sketch、Figma等传统设计软件对设备的依赖,使设计师可以随时随地使用任何设备打开网页浏览器,轻松实现跨平台、跨时空的设计合作。然后,为了提高国内设计师的使用体验,Adobe XD如…...
CentOS 7 安装Jenkins2.346.1(war方式安装)
既然想要安装Jenkins,肯定是先要从官网解读所需环境配置信息,如需了解更多自行查阅 https://www.jenkins.io/doc/book/installing/linux/ JDK17,Maven3.9 安装 先从官网分别下载JDK17与Maven3.9 下载好之后上传至服务器、并解压:…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
