古记事法: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…...
大模型部署手记(1)ChatGLM2+Windows GPU
1.简介: 组织机构:智谱/清华 代码仓:https://github.com/THUDM/ChatGLM2-6B 模型:THUDM/chatglm2-6b 下载:https://huggingface.co/THUDM/chatglm2-6b 镜像下载:https://aliendao.cn/models/THUDM/chat…...
Rust Rocket: 构建Restful服务项目实战
前言 这几天我的笔记系统开发工作进入了搬砖期,前端基于Yew,后端基于Rocket。关于Rocket搭建Restful服务,官方也有介绍,感觉很多细节不到位。因此我打算花2到3天的时间来整理一下,也算是对自己的一个交代。 对于有一…...
苹果签名有多少种类之TF签名(TestFlight签名)是什么?优势是什么?什么场合需要应用到?
(一)TestFlight 能够让您:邀请内部和外部的测试人员为应用程序提供反馈。 跟踪应用程序在测试过程中发现的 bug 和用户体验问题。 收集 Crash 报告,了解应用程序在真实设备上的运行状况。 要使用 TestFlight,您可以按照…...
如何将图片存到数据库(以mysql为例), 使用ORM Bee更加简单
如何将图片存到数据库 1. 创建数据库: 2. 生成Javabean public class ImageExam implements Serializable {private static final long serialVersionUID 1596686274309L;private Integer id;private String name; // private Blob image;private InputStream image; //将In…...
【“栈、队列”的应用】408数据结构代码
王道数据结构强化课——【“栈、队列”的应用】代码,持续更新 链式存储栈(单链表实现),并基于上述定义,栈顶在链头,实现“出栈、入栈、判空、判满”四个基本操作 #include <stdio.h> #include <…...
es的nested查询
一、一层嵌套 mapping: PUT /nested_example {"mappings": {"properties": {"name": {"type": "text"},"books": {"type": "nested","properties": {"title": {"t…...
<一>Qt斗地主游戏开发:开发环境搭建--VS2019+Qt5.15.2
1. 开发环境概述 对于Qt的开发环境来说,主流编码IDE界面一般有两种:Qt Creator或VSQt。为了简单起见,这里的操作系统限定为windows,编译器也通用VS了。Qt版本的话自己选择就可以了,当然VS的版本也是依据Qt版本来选定的…...
python:进度条的使用(tqdm)
摘要:为python程序进度条,可以知道程序运行进度。 python中,常用的进度条模块是tqdm,将介绍tqdm的安装和使用 1、安装tqdm: pip install tqdm2、tqdm的使用: (1)在for循环中的使用࿱…...
Java类型转换和类型提升
目录 一、类型转换 1.1 自动类型转换(隐式) 1.1.1 int 与 long 之间 1.1.2 float 与 double 之间 1.1.3 int 与 byte 之间 1.2 强制类型转换(显示) 1.2.1 int 与 long 之间 1.2.2 float 与 double 之间 1.2.3 int 与 d…...
C# 读取 Excel xlsx 文件,显示在 DataGridView 中
编写 read_excel.cs 如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Data; using System.Linq; using System.Text; using System.Data.OleDb;namespace ReadExcel {public partial class Program{static…...
搜集关键词的网站/网络营销首先要
当一个进程向另一个级才能传送一打开的文件描述符时,希望发送进程和接收进程共享同一文件表项。 发送进程实际上向接收进程传送一个指向一打开文件表项的指针。该指针被分配存放在接收进程的第一可用描述符项中,即发送进程和接收进程的描述符编号一般不…...
衡水网络推广 衡水网站建设/可以免费发帖的网站
二、填空题(每空1分,共10题)1、存储器中可容纳的信息数量,称为存储器的容量。2、将一个十进制的整数转换成二进制数,可用除二取整的方法进行。3、地址译码器的输入信息来自CPU的地址寄存器。4、计算机的工作是按照指令进行的。5、硬连线方式是…...
手机抖音你做我女朋友好吗套路网站/网络优化需要哪些知识
win d 后任务栏不见了。 解决办法: http://jingyan.baidu.com/article/63f23628f01d420208ab3d9d.html 点开始键也可以。 任务栏,windows 不稳的程序之一。...
广告发布登记管理规定/在线seo外链工具
前面介绍LLVM的第一篇中,我们介绍过,编译器的后端基本都可以通过LLVM来解决。 那么,前端我们如何处理呢?我们选择ANTLR。 例子超丰富的ANTLR ANTLR是用Java写的词法和语法分析工具。它比lex/flex/yacc/bison是更现代的工具。 最…...
军事网址大全 网站/b站推广入口
方法一 /*** * 根据php的$_SERVER[HTTP_USER_AGENT] 中各种浏览器访问时所包含各个浏览器特定的字符串来判断是属于PC还是移动端* author 飞鱼* lastmodify * return BOOL*/ function checkmobile() {global $_G;$mobile array(); //各个触控浏览器中$_SERVER[…...
上海内贸网站建设/东莞seo建站排名
虽然pandas是数据分析、机器学习等必备利器,但现在流行的机器学习应用训练模型动辄需要GB级别的数据,很多时候pandas无法快速读取大数据文件或者进行高效运算,甚至可能存在内存溢出等情况。如果是R语言的用户应该很熟悉data.table库ÿ…...