古记事法:Windows 下 16 位汇编环境搭建指南(DOSBox-X 篇)
文章目录
- 参考
- 环境
- DOSBox-X
- WOW
- Windows On Windows 产生的原因
- Windows On Windows 的工作原理
- WOW16 的结束与 WOW64 的未来
- 在现代操作系统中运行 16 位应用程序
- DOSBox-X
- 16 位汇编环境的搭建
- 应用准备
- 挂载
- 自动挂载
- dosbox-x.conf
- 配置工具
参考
| 项目 | 描述 |
|---|---|
| 搜索引擎 | Bing、Google |
| AI 大模型 | 文心一言、通义千问、讯飞星火认知大模型、ChatGPT |
| 汇编语言(第四版) | ISBN: 9787302539414、作者:王爽 |
环境
| 项目 | 描述 |
|---|---|
| DOSBox-X | 2023.09.01(64-bit SDL1) |
| 操作系统 | Windows 10(专业版) |
DOSBox-X
WOW
Windows On Windows(WOW)是 Windows 操作系统中提供的 子系统,该子系统允许在 Windows 上运行 为其他架构的 Windows 编写的应用程序。Windows On Windows 的名字通常后面跟着一个版本号,常使用到的 Windows On Windows 有 WOW(也被称为 WOW16) 与 WOW64,它们分别支持在 32 位 Windows 操作系统中运行 16 位应用程序以及在 64 位 Windows 操作系统中运行 32 位应用程序。
Windows On Windows 产生的原因
- 向后兼容性
微软公司为了保证软件的向后兼容性,即新版本的操作系统仍然可以运行旧版本的软件,创建了WOW。这意味着当用户或企业升级到新版本的Windows时,他们不需要重新购买或重新开发所有的应用程序。 - 降低架构变迁带来的影响
随着计算机硬件的发展,计算机架构从16位迁移到了32位,又从32位迁移到了64位。在这些迁移过程中,为了不失去大量已有的软件资源和保持平滑过渡,WOW 成为了一种解决方案。
Windows On Windows 的工作原理
WOW 创建了一个 运行时环境(计算机程序在其执行期间所需的软件和硬件环境),模拟采用旧架构的 Windows。当一个旧的应用程序尝试访问系统资源或函数时,WOW 会拦截这些请求,并在子系统上提供相应的资源或函数。这使得旧的应用程序 认为 它们正在运行在采用旧架构的 Windows 上。
WOW16 的结束与 WOW64 的未来
随着 16 位应用程序的逐渐减少,对 WOW16 的需求也逐渐减少。自 Windows 7 32 位操作系统后,Windows 操作系统都不再支持 WOW16。
目前,WOW64 仍然是 64 位 Windows 操作系统的重要组成部分,因为大量的 32 位应用程序仍在广泛使用。但与此同时,随着 64 位应用程序的普及,32 位应用程序的数量可能会逐渐减少。但是,至少在可预见的未来,WOW64 仍然是 64 位 Windows 操作系统的一个重要组成部分。
在现代操作系统中运行 16 位应用程序
现代操作系统如 Windows 11 等已经 不再支持直接运行 16 位应用程序了。如果需要在这些操作系统中运行 16 位应用程序则需要使用到 虚拟机 或 模拟器。不过为了一个 16 位应用程序,搭建一个虚拟机还是有点 牛刀小试,毕竟在当下环境中,有价值多是 32 位或 64 位的应用程序。
简便起见,我们将使用模拟器来搭建 16 位汇编环境。

DOSBox-X
DOSBox-X 是一个 开源的 x86 模拟器,主要用于运行 早期操作系统 MS-DOS 中的应用程序。与原始的 DOSBox 相比,DOSBox-X 提供了 更多的特性并对原有缺陷进行了改进,使其 更加适合用于模拟早期的 PC 环境。
如果你希望在不支持 16 位应用程序(如 Debug)的操作系统中使用它们,那么你需要一个模拟器,而 DOSBox-X 就是一个很好的选择。

DOSBox-X 在其官网提供了不同的安装包,如果您需要使用到 DOSBox-X,请前往下载安装。

在 DOSBox-X 官网中,Windows 相关的安装包提供了 XP+ 与 Vista+ 两个版本,这两个版本都提供 64 位与 32 位的应用程序。XP+ 与 Vista+ 两者的区别暂不明确,但 Vista+ 版本的安装包所占用的内存空间更大,所以我选择了 Vista+😎。
在安装 DOSBox-X 时,会有许多选项,如果你不懂如何选择那么使用 默认选项,一路 Next 即可。
16 位汇编环境的搭建
应用准备
在 DOS 和 早期的 Windows 环境 下,开发 16 位汇编程序通常需要一系列工具来编写、编译、链接和调试代码。Edit、MASM、Link 以及 Debug 是 16 位汇编中常使用到的工具,它们为 16 位汇编程序的开发 提供了基本的支持。如下是对这些工具进行的简单介绍:
| 工具 | 描述 |
|---|---|
Edit | Edit 是 MS-DOS 和初期 Windows 系统提供的一个基本文本编辑器,可以用来编写汇编源代码或其他文本文件。 |
MASM (Microsoft Macro Assembler) | MASM 是微软提供的汇编器,用于 将汇编语言源代码转换为机器代码。 |
Link | Link 是一个链接器。当一个项目 由多个汇编或其他语言的源文件组成时,这些文件首先被单独编译成目标文件,然后由链接器将它们链接成一个可执行程序。 |
Debug | Debug 是一个在 MS-DOS 和一些 Windows 系统中提供的命令行工具,用于 诊断程序在运行时产生的错误、异常或意外行为,并据此采取措施来解决问题,以确保程序能够按照预期的方式运行。 |
所需工具我已压缩并上传至 CSDN,如有需要请前往下载。
挂载
DOSBox-X 是一个 x86 模拟器,主要用于运行 MS-DOS 和老旧 Windows 程序。当我们使用 DOSBox-X 或其他 DOSBox 变种时,我们实际上是在创建一个模拟的 MS-DOS 环境,而这个环境 默认是无法直接访问宿主机上的资源的。限制 DOSBox-X 对宿主机文件的直接访问可以防止潜在的恶意软件或误操作导致重要文件被损坏或销毁。
因此,为了在 DOSBox-X 中访问本机的文件或目录,用户需要使用 mount 命令将宿主机的文件夹 挂载 到模拟环境的一个 驱动器 上。例如,为了将宿主机的 C:\Program Files\8086 AssemblyTools 文件夹挂载到 DOSBox-X 中的 D: 驱动器,你可以使用以下命令:
mount D 'C:\Program Files\8086 AssemblyTools'
这样,在 DOSBox-X 中访问 D: 驱动器时,实际上是在访问宿主机的 C:\Program Files\8086 AssemblyTools 文件夹。如需访问 D: 驱动器,请使用如下命令:
D:
注:
- 在命令行中,若文件路径中包含
空格,请使用引号将文件路径进行包裹。 - 请将与
16 位汇编相关的工具存放到一个文件夹中并将其挂载至 DOSBox-X 中。

自动挂载
通过命令行将文件挂载至 DOSBox-X 仅能影响本次开启的 DOSBox-X,在您重新开启 DOSBox-X 后,如果需要访问上一次挂载的文件则需要对其进行重新挂载。
dosbox-x.conf
在 DOSBox-X 的安装路径中存在与其相关的配置文件 dosbox-x.conf,在该文件的末尾存在如下内容:
[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.
[autoexec] 以下的内容除注释外都将 在 DOSBox-X 启动时自动执行,您可以将 挂载宿主机文件 及 进入被挂载驱动器的目录 的命令输入于此。对此,请参考如下示例:
[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.
mount D 'C:\Program Files\8086 AssemblyTools'
D:
保存 dosbox-x.conf 文件,重新启动 DOSBox-X 后,该配置文件即生效。

配置工具
除了通过配置 dosbox-x.conf 配置文件来实现宿主机文件的自动挂载外,您还能够通过 DOSBox-X 提供的配置工具来对配置文件进行修改。

在点击 配置工具 后,将弹出一个弹框。

最后一个按钮 AUTOEXEC.BAT 与配置文件中 dosbox-x.conf 中的 [autoexec] 相对应,您可以通过点击该按钮对配置文件中的 [autoexec] 配置项进行修改。

相关文章:
古记事法:Windows 下 16 位汇编环境搭建指南(DOSBox-X 篇)
文章目录 参考环境DOSBox-XWOWWindows On Windows 产生的原因Windows On Windows 的工作原理WOW16 的结束与 WOW64 的未来 在现代操作系统中运行 16 位应用程序DOSBox-X 16 位汇编环境的搭建应用准备挂载自动挂载dosbox-x.conf配置工具 参考 项目描述搜索引擎Bing、GoogleAI 大…...
云计算基础:理解AWS、Azure和Google Cloud
云计算基础:理解AWS、Azure和Google Cloud 介绍 云计算已经成为现代科技领域的重要驱动力之一。它为企业提供了灵活性、可伸缩性和成本效益,以满足日益增长的计算和存储需求。本文将深入探讨三个主要的云计算提供商:Amazon Web Services (A…...
【数据结构初阶】七、非线性表里的二叉树(堆的实现 -- C语言顺序结构)
相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【数据结构初阶】六、线性表中的队列(链式结构实现队列)-CSDN博客 1 . 非线性表里的 树(Tree) 树的概念及结构: 树的概念 树是一种非线性的数据…...
基于SpringBoot的网上超市系统
基于SpringBoot的网上超市系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringBootMyBatis工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:用户、管理员 管理员:个人中心、用户管理、商品分类…...
在springboot项目中整合Druid
或 1.导入maven坐标 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.19</version> </dependency>2.在application.properties中配置连接池 spring:datasource:d…...
微信支付费率降低到0.2%,商家收款开户手续费0.6%降低的操作方法
在如今的数字时代,移动支付已成为人们日常生活中必不可少的一部分。微信支付作为国内最受欢迎的移动支付平台,一直致力于为商家和个人提供最便捷、安全的支付方式。如果可以将微信支付将费率降低到仅为0.2%,这无疑给广大商家带来了巨大的利好…...
计算机毕业设计 基于SSM的民宿推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
【机器学习】训练集/验证集/测试集释疑
文章目录 序言1. 训练集、验证集、测试集是什么2. 为什么需要验证集3. 验证集是必须的吗4. 验证集和测试集上的表现会不同吗5. 如何从Train/Test Set划分Validation Set6. 训练集、验证集和测试集的比例怎么设置7. 模型表现不好时测试集可以反复使用来调整模型吗8. 训练集、验证…...
LCR 120.寻找文件副本
题目来源: leetcode题目,网址:LCR 120. 寻找文件副本 - 力扣(LeetCode) 解题思路: 使用哈希集合判断是否有元素重复出现即可。 解题代码: class Solution {public int findRepeatDocument(…...
代码随想录算法训练营第44天|动态规划:完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ
动态规划:完全背包理论基础 518.零钱兑换II https://leetcode.cn/problems/coin-change-ii/ 用一个二维dp数组 class Solution { public:int change(int amount, vector<int>& coins) {vector<vector<int>> dp(coins.size(), vector<i…...
309.买卖股票的最佳时机含冷冻期【Java】
309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次…...
React Promise 中断
需求: 上传文件,但是后端接口不支持多文件上传,但是一次性发出很多请求的话如果有100个文件那对后端的压力又太大了在上传的时候还需要有停止上传的按钮 进程: async await 只能做到第一步,但是无法在上传中的时候关…...
1.填空题 进制转换Oct.2023
原题 部分可能会有用处的知识: p p p进制转十进制: 假设有一个 p p p进制数,个位是 a 0 a_0 a0,向高位依次是 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an,向低位依次是 b 1 , b 2 , b 3 , . . . …...
node 解决多版本配置 error:03000086:digital 引起的问题 已解决
在日常后端工作中,难免会安装前端的项目,今天有旧项目需要维护,但是 提示 node版本过高,或者不是长维护版本,部分分享说,加 opensll 过滤能解决,但是 还是不行,索性来这个 底朝天的找…...
前端面试题: js中对比两个对象的值是否相等? for..in 和 for...of的区别?
我去面试的时候会问这个问题, 而且发现不管是初级还是工作一段时间的小伙伴 都会说的不是很清晰 比如第一道题哈: 首先大部分人都会想起来 我们用JSON.stringify() 进行转换,查看两个是否相等 你敢说我下面的对象 值不是想等的吗。 但是你用…...
第十七章:Java连接数据库jdbc(java和myql数据库连接)
1.进入命令行:输入cmd,以管理员身份运行 windowsr 2.登录mysql 3.创建库和表 4.使用Java命令查询数据库操作 添加包 导入包的快捷键 选择第四个 找到包的位置 导入成功 创建java项目 二:连接数据库: 第一步:注册驱动…...
Unity基于种子与地块概率的开放世界2D地图生成
public class BuildingGen : MonoBehaviour {public int[] Building;//存储要生成的地块代码public int[] Probability;//存储概率public double seed;public int width 100;public int height 100;public float noiseScale 0.1f; //噪声缩放倍数private int[,] frequencyM…...
5.Vectors Transformation Rules
在上节,有个问题:向量分量的转换方式 与 新旧基底的转换方式相反 用例子来感受一下, 空间中一向量V,即该空间的一个基底:e1、e2 v e1 e2 现把基底 e1 、 e2 放大两倍。变成 基向量放大了两倍, 但对于…...
聊聊httpclient的CPool
序 本文主要研究一下httpclient的CPool ConnPool org/apache/http/pool/ConnPool.java public interface ConnPool<T, E> {/*** Attempts to lease a connection for the given route and with the given* state from the pool.** param route route of the connecti…...
B2主题优化:WordPress文章每次访问随机增加访问量
老站长都知道,一个新站刚开始创建,内容也不多的时候,用户进来看到文章浏览量要么是0,要么是 个位数,非常影响体验,就会有一种“这个网站没人气,看来不行”的感觉。 即使你的内容做的很好&#x…...
OpenClaw+GLM-4.7-Flash极客玩法:浏览器自动化与RPA任务融合
OpenClawGLM-4.7-Flash极客玩法:浏览器自动化与RPA任务融合 1. 当OpenClaw遇见GLM-4.7-Flash 去年冬天的一个深夜,我正为重复性的网页数据抓取任务头疼不已。Selenium脚本频繁因页面结构变化而崩溃,每次都需要人工介入调整。直到发现OpenCl…...
ChatGLM3-6B新手必看:断网可用的本地智能对话解决方案
ChatGLM3-6B新手必看:断网可用的本地智能对话解决方案 1. 引言:为什么你需要一个本地AI助手? 想象一下,你正在处理一份敏感的客户合同,需要AI帮你分析条款;或者你在一个没有稳定网络的环境里,…...
探索电池2RC等效电路模型:从参数辨识到SOC估计
电池2RC等效电路模型,最小二乘法参数辩识,电池端电压误差小,扩展卡尔曼估计SOC精度高。 有文档,数据,视频,仿真图。在电池研究领域,准确建模和参数估计对于理解电池行为至关重要。今天咱就唠唠电…...
大多数加密API都不够用:量化团队真正需要的数据到底是什么?
如果你做过加密相关开发,无论是: 量化交易数据平台研究分析风控系统 你大概率都会经历一个阶段: 👉 API 接了一堆,但始终“不够用”。 常见的一个误区 很多人在刚开始做数据接入时,会觉得: …...
信创实践:Nacos 2.4.1 与人大金仓 Kingbase 的深度适配与性能调优
1. 为什么需要从MySQL迁移到人大金仓Kingbase? 最近几年,国产数据库的发展速度确实让人惊喜。作为一线开发者,我亲身体验了从MySQL迁移到人大金仓Kingbase的全过程。说实话,刚开始心里也没底,毕竟MySQL用得太顺手了。但…...
SolidWorks2021设计库隐藏技巧:如何自定义Toolbox标准件库满足企业需求
SolidWorks 2021企业级Toolbox深度定制:打造标准化设计引擎 在企业级机械设计环境中,标准化程度直接决定了团队协作效率和设计质量。SolidWorks 2021的Toolbox功能远不止是一个标准件库,当经过深度定制后,它能成为企业设计流程的中…...
类和对象(中)——运算符重载
引入语言在语法上可以直接用指令实现运算符对 内置类型 的操作C中加入了类类型,那如何使用以前的运算符(如 - * / 等),对类类型进行操作呢?由此引入运算符重载:C为了增强代码的可读性引入了运算…...
面向对象高级三:内部类 枚举 泛型 java.lang包下常用API
一.内部类1.内部类概述 2.成员内部类(实例内部类)(1)成员内部类可以定义类的一切成员(2)当创建对象时不能直接给内部类创建对象而要先创建外部类的对象 然后new成员内部类的对象(3)在…...
OpenClaw调用百川2-13B量化模型实测:Token消耗降低30%的3个技巧
OpenClaw调用百川2-13B量化模型实测:Token消耗降低30%的3个技巧 1. 为什么选择量化模型 当我第一次在本地部署OpenClaw时,最让我头疼的就是显存问题。我的RTX 3090显卡在运行百川2-13B原版模型时,显存占用经常突破20GB,导致其他…...
JDK17下Lombok报错?手把手教你解决IllegalAccessError问题(附最新版本配置)
JDK17与Lombok兼容性实战:彻底解决IllegalAccessError的终极指南 最近在将项目迁移到JDK17时,不少开发者反馈遇到了一个棘手的错误:java.lang.IllegalAccessError,特别是与Lombok相关的模块访问问题。这个错误看似简单,…...
