《汇编语言 基于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 下载好之后上传至服务器、并解压:…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
