《汇编语言 基于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 下载好之后上传至服务器、并解压:…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。  - 个性化梦境…...
 
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
 
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
 
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
 
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
 
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
 
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
 
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
 
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

