当前位置: 首页 > news >正文

《汇编语言 基于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. 通义灵码&#xff08…...

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日----中国杭州&#xff0…...

图的访问(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 下载好之后上传至服务器、并解压&#xff1a…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...