VMware 配置 DVD / CD-ROM | 软盘驱动器 | DOS

注:本文为 “VMware 配置 DVD / CD-ROM 、软盘驱动器、DOS” 相关文章合辑。


VMware Workstation 配置 DVD、CD-ROM 和软盘驱动器

更新时间 2022 年 01 月 09 日

最多可以将 4 个 IDE 设备、60 个 SCSI 设备以及 120 个 SATA 设备(4 个控制器,每个控制器 30 个设备)添加到虚拟机中。其中的任意设备均可以连接到物理或虚拟 CD-ROM 或 DVD 设备。CD-ROM 和 DVD 设备无法连接到 NVMe 控制器。

虚拟机可以从 DVD 光盘中读取数据。Workstation Pro 不支持在虚拟机中播放 DVD 影片。如果使用的 DVD 播放器应用程序不需要在显卡中提供视频覆盖支持,您或许可以播放影片。

将 DVD 或 CD-ROM 驱动器添加到虚拟机

更新时间 2022 年 01 月 09 日

您可以将一个或多个 DVD 或 CD-ROM 驱动器添加到虚拟机中。您可以将虚拟 DVD 或 CD-ROM 驱动器连接到物理驱动器或 ISO 映像文件。

无论连接到何种类型的物理驱动器,您都可以将虚拟 DVD 或 CD-ROM 驱动器配置为 IDE、SCSI 或 SATA 设备。例如,如果主机具有 IDE CD-ROM 驱动器,您可以将虚拟机驱动器设置为 SCSI 或 IDE 并将其连接到主机驱动器。

除非在正常模式下遇到问题,否则,不要配置旧版模拟模式。有关详细信息,请参见为 DVD 或 CD-ROM 驱动器配置旧版仿真模式。

过程

  1. 选择该虚拟机,然后选择虚拟机>设置
  2. 硬件选项卡中,单击添加
  3. 添加硬件向导中,选择DVD/CD 驱动器
  4. 单击完成以将驱动器添加到虚拟机中。
    5.(可选)要更改用于驱动器的 SCSI、IDE 或 SATA 设备标识符,请选择驱动器,然后单击高级
  5. 单击确定以保存所做的更改。

为 DVD 或 CD-ROM 驱动器配置旧版仿真模式

更新时间 2022 年 01 月 09 日

使用旧版仿真模式可解决客户机操作系统与 DVD 或 CD-ROM 驱动器之间的直接通信问题。

在旧版仿真模式中,您只能从 DVD 或 CD-ROM 驱动器的数据光盘中读取数据。旧版仿真模式不提供其他正常模式功能。在正常模式下,客户机操作系统可与 CD-ROM 或 DVD 驱动器直接通信。通过这种直接通信,您可以读取多会话 CD、执行数字音频提取、查看视频并使用 CD 和 DVD 刻录机刻录光盘。

如果一次运行多个虚拟机,且这些虚拟机的 CD-ROM 驱动器处于旧版仿真模式,则必须断开其 CD-ROM 驱动器连接才能开启虚拟机。通过断开虚拟机中连接的 CD-ROM 驱动器,可以避免多个虚拟机同时连接 CD-ROM 驱动器。

过程

  1. 选择该虚拟机,然后选择虚拟机>设置

  2. 硬件选项卡中,选择驱动器,然后单击高级

  3. 选择旧版仿真,然后单击确定

    在 Windows 主机中,默认情况下未选择该选项。在配有 IDE 驱动器的 Linux 主机上,默认设置取决于内核中是否加载了 ide-scsi 模块。必须加载 ide-scsi 模块或使用物理 SCSI 驱动器才能直接连接到 DVD/CD-ROM 驱动器。

  4. 单击确定以保存所做的更改。

将软盘驱动器添加到虚拟机

更新时间 2022 年 01 月 09 日

您可以配置虚拟软盘驱动器以连接到物理软盘驱动器或现有 / 空软盘映像文件。您最多可以将两个软盘驱动器添加到虚拟机中。

前提条件

关闭虚拟机。

过程

  1. 选择该虚拟机,然后选择虚拟机>设置

  2. 硬件选项卡中,单击添加

  3. 添加硬件向导中,选择软盘驱动器

  4. 单击完成以将驱动器添加到虚拟机中。

  5. 选择软盘介质类型。

    选项说明
    使用物理软盘驱动器虚拟机使用物理软盘驱动器。
    使用软盘映像驱动器连接到软盘映像 (.flp) 文件。
    创建空软盘映像驱动器连接到您创建的空软盘映像 (.flp) 文件。
  6. 如果选择了物理软盘驱动器介质类型,请选择一个特定的软盘驱动器,或选中自动检测以允许 Workstation Pro 自动检测要使用的驱动器。

  7. 如果选择了软盘映像或空软盘映像介质类型,请键入名称或浏览到软盘映像 (.flp) 文件位置。

  8. 要在虚拟机启动时将驱动器或软盘映像文件连接到虚拟机,请选择启动时连接

  9. 单击确定以保存所做的更改。

  10. 如果将第二个软盘驱动器连接到虚拟机,请在虚拟机 BIOS 中启用该驱动器。

    1. 选择虚拟机,然后选择虚拟机>电源>启动时进入 BIOS
    2. 选择传统软盘 B:,并使用数字键盘上的加号 (+) 和减号 (-) 键选择要使用的软盘驱动器类型。
    3. 按 F10 以保存设置。

使用 VMware 创建 DOS 虚拟机

Simon D. Guqiu 已于 2024-12-07 15:49:38 修改

搞个 VMware 虚拟机安装 DOS 怀个旧。

DOS 是 Disk Operating System 的缩写,磁盘操作系统,顾名思义,它就是操作磁盘文件的。

DOS 使用一种叫汇编的低级语言,和 Python、C++ 等等一样,它也是编程语言,但它更接近于底层,换句话说运行需要的资源更少,适合从前内存不满 16MB 的电脑。汇编就起到了操纵系统进行计算的作用,使它有了更复杂的操作。

好了,简单的介绍就到这里,接下来搞事开始……

第一步:下载 DOS 和 VMware,安装 VMware

过去的 PC 使用软盘,所以这里下载的 DOS 版本只能使用软盘。为了方便使用,我们就下载 MS-DOS 的最后一个版本。

实际上这个版本并不是由微软开发的,而是在停止开发新的 DOS 之后由中国 DOS 联盟维护的 7.1 版本。

向下拉,选择 Microsoft DOS 下载 :

Download nameVersionLanguageArchitectureFile sizeDownloads
3½ Floppy Microsoft DOS 7.1 (3.5) 💾7.1 (China DOS Union)Englishx862.74MB42
CD Microsoft DOS 7.1 (CD) 💿 7.1 (China DOS Union)Englishx868.09MB90

选择两个服务器的链接中你看顺眼的那一个:

Microsoft DOS 7.1 (3.5)

Mirrors

然后静候下载即可,下一步就是下载 VMware 了

第二步:配置一个新的虚拟机

img

安装完成之后,需要重启,然后就进入了这个界面,点击创建虚拟机。

img

选择典型,下一步。

img

选择稍后安装操作系统,下一步。

img

选择其他,在版本里选择 MS-DOS,下一步。

img

这里就随便起个名字,然后选一个风水宝地放下来。

img

选择大小,其实 1G 不到就足够了,但是为了方便后续安装,还是分个 2G 吧,存成单文件。

img

最后直接点击完成即可。

img

随后,主界面上就出现了这个虚拟机。

然后就运行?想多了,我们还没有安装软盘呢。找到刚刚下载的那个压缩包,解压,拷过来。

在主界面上点击编辑虚拟机设置。

img

选择左边最下面的的添加。

img

再选择软盘驱动器,完成。

回到上个界面,点进软盘。

img

接下来选择使用软盘映像文件,再找到你刚刚拷过来的解压的文件,选择第一张盘(disc01.img), 然后点击最下面的确定。

img

好的,创建虚拟机的步骤就完成了!

第三步:运行 & 安装

点击主界面的开启此虚拟机。

img

然后便进入了安装界面。

img

继续 Next。

img

这个版本是 DOS 开源之后的,所以它的协议是 GPL(没想到吧)。当然得同意。

img

选择 Continue。

img

没有找到分区,那就选择前面一个,创建一个分区。

img

然后选择重启。

img

然后把前面的一堆再选一遍,直到进入这个界面,选择 Yes。

img

使用默认位置。

img

创建目录,选 Yes。

img

终于进入了安装界面,选择全部安装,也就是默认选项。

img

选择 Yes 安装 DOS 的图形界面。

img

没问题的话直接选择安装。

img

第一张盘很快就安装好了,接下来需要插入第二张盘……

咦,插槽呢?

想多了。这个时候我们点击右下角按钮里的 💾,选择设置,进入设置界面,选择 disc02.img。

img

点击确定,在虚拟机里点击 Continue。

img

进入 Add-On 安装界面,选择 Continue。

img

接下来选择插件安装盘,直接跳过,因为我们手上没有插件安装盘,有兴趣的同学可以自己找一找下载下来,这里就不演示了。

下一步是要不要显示 Logo,选择 Yes。

img

是否启用日志,选择 Yes。

img

是否启用直接读写,选择 Yes。

img

按照文字介绍,选择第一个选项。

img

同样直接选择第一个,到这里我也看不懂了……

img

选择 Use default(依然看不懂)。

img

接下来全部选择 Use default,因为作者也疯了,没截到图。

然后在重启之前,点击![img](https://i-blog.csdnimg.cn/blog_migrate/711a614db57857e4f55e3ddeb5be6904.png =750x),选择断开连接。

img

选择 Yes。

重启之后,就是 DOS 界面啦!


【汇编语言】 安装虚拟机运行 dos 系统 教程

奶酪博士已于 2023-05-14 10:22:29 修改

前言

1. 问题背景

(1)学习王爽老师《汇编语言》(第四版) 第十七章时,需要编程来读写磁盘。因为书中讲解的软盘如今已很少被使用,如果买软盘及软驱,我不确定是否真的能运行,且学完这节课后就基本无用,实属资源浪费。起初我打算使用同样属于磁盘的 U 盘来作为替代。这些程序要使用 BIOS 的 13H 号中断例程,但是它们在我使用的(64 位 win10 系统)DosBox(虚拟 dos 环境的软件)中无法正确运行。

(2)我又将读写 U 盘改为读写笔记本里的固态硬盘,仍然无法读取,返回值一直是 FF。

(3)后来我尝试了使用 01F0H-0HF7H 硬盘端口读取硬盘数据,同样无法运行。

(4)再后来,尝试了在虚拟机中运行 dos 系统,然后在实模式下运行读写磁盘的程序,结果是仍然不行。

(5)最终,我无功而返。唯一能做的就是将这耗费整整五天得来的探索经验总结下来,后人可以少走弯路。

2. 小结

这几天的探索经验总结如下。

(1)无论是在 64 位 win10 系统下的 DosBox 中,还是在 dos 系统虚拟机中运行,都无法通过 01f0H-01f7H 端口 读写硬盘(包括 U 盘)的数据。

(2)无论是在 64 位 win10 系统下的 DosBox 中,还是在 dos 系统虚拟机中运行,都可以通过 BIOS 的 13H 中断例程 读取磁盘的数据,但不能写入数据(原因不明)。

(3)学会了如何在 64 位 win10 系统下,使用虚拟机运行 dos 系统,并运行汇编程序。(接下来详细介绍)

在虚拟机软件与 DOS 系统版本的选择方面,我认为比较好的方案是:

①. 使用 VMware 公司的虚拟机软件,因为它提供了官方的免费正版可供使用,比较稳定可靠;

②. 使用 FreeDos 这个开源 dos 操作系统,因为它开源且与微软的 MS-DOS 完全兼容;

3. 本文概述

本文按照操作顺序,详细介绍:

  1. 如何下载安装 VMware 虚拟机软件;

  2. 如何下载 DOS 操作系统的安装包;

  3. 如何创建虚拟机并安装 Dos 操作系统;

  4. 如何在 dos 虚拟机中运行汇编程序。

一、下载、安装 VMware 虚拟机软件

1. 下载

(1)访问官网

打开 VMware 官网 后界面如图。

img

(2)找到产品搜索框

点击顶部菜单栏中的 “应用 平台”,之后将右侧的滚动条(注意!是橙色圈出来的那个!)下拉到底部。效果如图。

img

然后点击图中的 “所有产品”。页面跳转后,将页面下拉,会在左边看到搜索框,如图。

img

(3)搜索 workstation 软件

在搜索框中搜索 “workstation”,回车,如图。

img

(4)下载 workstation player

① 选择 “workstation player” 产品

点击 “workstation player”,页面跳转后,点击 download。(player 是免费版,Pro 是收费版)

img

②选择版本号

如下页面,点击 “下载”。

img

③ 选择对应操作系统的版本

点击下载,如图。(我使用的是 64 位 windows 系统)

img

文件大小 584MB,下载速度 Ok,几分钟之内下载完成。

2. 安装 VMware 虚拟机

双击运行安装程序,一路 “下一步”。

在这一步可以选择安装位置,如图。

img

这里的 “增强型键盘驱动程序”,我查了一下,似乎是这样的:它的作用是为了增强安全性,但普通使用可以不安装,以后需要用了可以随时安装。于是我决定不勾选。

之后正常安装,需要等待几分钟,即可安装完成。

二、下载 dos 操作系统的安装文件

1. 关于 dos

虚拟机也像真实的物理机一样,需要操作系统。我想要在虚拟机上运行 dos 系统,于是现在需要一个 dos 系统的安装文件。

dos 系统是微软开发的,不过早就已经停止更新了。而 dos 系统在一些领域还有实际作用(比如运行经典 dos 程序等),因而一些开源社区还在持续维护 dos 系统。微软的 MS-Dos 我没有找到开源的安装镜像文件。FreeDos 是一个开源的 dos 系统,完全兼容微软的 MS-Dos,正好方便学习。

FreeDos 这个网站上有开源的 dos 系统安装包,可以下载使用(目前最新版是 2022 年 2 月发布的)。

2. 下载 FreeDos 安装文件

(1)访问 FreeDos

进入 FreeDos 网站首页,如图。然后页面下拉,点击下载,跳转页面。

img

(2)版本选择

因为是学习汇编语言使用,只需要最核心的系统功能(而不需要各种扩展功能及附带的游戏等),可以选择 FreeDos 1.3 Floppy Edition 版本(这是一个软盘安装版本),压缩包只有 20.6MB。

img

(3)关于软盘安装

下载后打开压缩包,发现其中有三个文件夹:120m 、 144m、720k 。这个名称是指每一张软盘的容量大小。这个软盘版本的安装程序,自然就是使用软盘来安装操作系统。如果是在真实物理机上使用软盘安装操作系统,就需要一张一张地按顺序插入软盘(插入到软驱中)。现在我们是要使用 VMware 创建虚拟机,然后在虚拟机上模拟这个过程,因此也会需要一张一张地按照顺序插入软盘,只不过在虚拟机上只需要用鼠标点而不需要操作真实的软盘。

为了操作方便(减少换软盘的次数),这里就选择容量最大的软盘,也就是 “144m” 这个文件夹,记住它的存放地址,一会儿要用到。

现在可以进行下一步了。

三、创建一个运行 dos 系统的虚拟机

1. 创建新的虚拟机

双击运行 workstation player,选择 “创建新虚拟机”。如图。

img

2. 选择创建方式

选择创建一个空白的硬盘,稍后安装操作系统。

这是因为我们下载的是软盘版本的安装文件(img 格式),如果下载的是 ISO 格式的安装文件,那么这一步就应该选择 “安装光盘映像文件”。

img

3. 选择操作系统

操作系统的版本选择:其它、MS-DOS。

img

4. 给虚拟机起个名字

5. 指定磁盘容量

默认的 2GB 已经很够用了,然后选择 单个文件 。

img

6. 添加一个软驱

自定义硬件,添加一个软驱。

img

7. 设置软驱

设置软驱,勾选启动时连接软驱。

软盘映像文件的地址,选择 FreeDos 的地址中 “144m” 文件夹的 “x86Boot.img” 文件。

这一步是将 “x86Boot.img” 这张软盘插入软驱,并且设置在虚拟机开机后自动读取软盘内容,开始安装操作系统。

img

8. 虚拟机开机,开始安装 FreeDos

现在,将虚拟机开机,就会自动从软驱中开始执行 FreeDos 的安装程序。

一路输入 Y(表示 Yes)即可,当出现下面这行提示的时候,表示需要插入另一张虚拟软盘。

img

9. 切换软盘

FreeDos 的 “144m” 文件夹中,一共有 6 张软盘,如图。现在已经放在虚拟软驱中的是第一张(x86BOOT.img)。

img

接下来,另外五张要依次插入虚拟软驱中,软盘切换的方法如下:

① Ctrl+alt 将鼠标切换回 windows 界面中,菜单栏 player - 管理 - 虚拟机设置。

img

② 在虚拟机的设置窗口右侧,将软盘镜像文件换成下一个 img 文件,然后回到 dos 系统界面按任意键,dos 就会读取这张软盘的内容。

③ 接下来重复操作,直到 “X86DSK05.img” 软盘也读取完毕,此时会有一行提示说这张软盘 “not bootable floppy”。这时需要再重新换回文件夹中的第一张软盘(x86Boot.img),再次读取完成后,FreeDos 系统就安装完成了。 界面如下。

img

现在 dos 系统已经安装完成,关机以后,就可以删除软驱中的镜像文件了。不删除也没事。

四、在 dos 虚拟机中运行汇编程序

现在已经有了能运行 dos 操作系统的虚拟机,接下来准备运行一个测试程序。

那么,就先写一个简单的测试程序吧。

1. 写一段测试程序

程序很简单,就是在屏幕上显示一个字符串。代码如下。

assume cs:code
data segment
    db 'Hello,Dos!',0
data ends
code segment
start:
    mov ax,data     ;ds:si 指向字符串源地址
    mov ds,ax
    mov si,0
    mov ax,0B800H   ;es:di 指向目标地址
    mov es,ax
    mov di,160*3+32*2
    s:              ; 显示字符串
    mov cl,ds:[si]
    jcxz ok
    movsb
    mov es:[di],07H
    inc di
    jmp s
 
    ok:             ; 程序返回
    mov ax,4c00H
    int 21H
code ends
end start

2. 关于虚拟机访问物理机的文件

以上这个测试程序是在 windows 系统中编写及保存的,现在要让虚拟机能够访问这些程序(exe 文件或者是 asm 文件)。

我探索了很久也无法实现在 dos 系统中读取物理机中的文件(试过了网上的各种方法,包括以管理员身份运行、共享文件夹、磁盘映射等等,均无果),于是决定另辟蹊径。既然 dos 虚拟机可以读取软盘,那么我们就可以将写好的程序打包成软盘镜像文件,然后在虚拟机的软驱中加载就可以了。

具体的设置方法如下。

3. 下载 img 镜像文件制作工具

(1)访问 WinImage 官网

访问 WinImage 官网 下载 30 天试用版,安装。

(2)新建一个镜像文件

① 新建一个软盘镜像文件,大小就选择 1.44MB。

② 然后,将要测试的 asm 文件拖拽到 WinImage 界面的软盘镜像文件中,然后将 masm.exe 和 link.exe 这两个工具也拖拽进去。这样就可以在 dos 系统中编译、运行。当然也可以在 windows 系统中先编译、链接为.exe 文件,再直接将 exe 文件拖拽到软盘镜像文件中。

③ 为了方便调试,记得将 debug32.exe 也拖拽到软盘镜像文件中。

注意,平时在 win10 系统下的 DosBox 中,我使用 debug.exe 工具进行调试,但是在 FreeDos 中,就要使用 debug32.exe 工具进行调试。如果使用 debug.exe 工具,在 FreeDos 中运行它时系统会提示说不是正确的 dos 版本。debug32.exe 也是开源工具,可以在 “debug.exe” 所在的目录中找一下,如果没有,就百度一个吧。

img

(3)保存镜像文件

这里注意,FreeDos 能识别的软盘镜像文件只有 img 和 flp 两个格式,因此保存镜像的时候,文件名的后缀要写 flp,下边的文件类型选 “vfd/flp 那个”,如图。这个文件的保存地址下一步要用到。

img

4. 在 dos 中运行软盘中的程序

(1)为虚拟机添加软驱

运行 VMware,在虚拟机关机状态,进入设置界面,添加一个软驱,勾选 “启动时连接”,软盘映像文件的地址就设置为上一步保存的那个 flp 文件的地址。

注意,要运行的程序所在的软盘文件,对应的软驱是 “软盘 2”,也就是会在盘符 B 下。

img

(2)访问新软盘

将虚拟机开机,进入后默认在盘符 A 下。这个 A 盘就是启动盘,对应着第一个软驱。(如果安装完 FreeDos 之后,已经将安装盘从软驱中清空的话,那么这里的默认盘符就是 C。)而上一步中新建的软驱,对应盘符 B。因此在命令行输入 b: 回车,就进入了 B 盘下。注意,要在英文状态下输入冒号!

(3)编译、连接

现在在命令行输入 dir 回车(这表示列出当前目录下的文件及文件夹),可以看到刚才打包的文件。

img

接着,就像之前在 DosBox 中一样,编译、链接。然后就可以运行了!

(假设文件名为 “1.asm”,则编译命令为 masm 1; 回车,链接命令为 link 1; 回车,运行命令为 1.exe 回车))

运行效果如下。

img

(4)debug32 调试

如果要使用 debug32 工具调试程序,那么首先进入到 debug32.exe 工具所在的目录,然后输入 debug32 回车 ,即可开始调试,如图。

img

5. 编程读取软盘数据

在 dos 虚拟机中,可以在程序中读取软盘的数据。只要在另一个软驱中(最多配置 2 个软驱)放置一个空的 flp 镜像文件,那么就相当于插入了一张空白软盘,然后就可以读取数据了。只能读软盘,不能读硬盘,软盘也是只能读不能写,我也很想知道为什么。

附上一段读取软盘数据的程序。

assume cs:code  ; 测试:编程读取软盘数据
data segment
    db 512 dup (41H)
data ends
stack segment
    db 16 dup (0)
stack ends
code segment
start:
    mov ax,stack    ; 初始化 设置栈顶
    mov ss,ax
    mov sp,20H
 
    mov ax,data     ;es:bx 指向接收磁盘数据的区域
    mov es,ax
    mov bx,0
 
    call test_read
 
    mov ax,4C00H
    int 21H
 
test_read:  ; 功能:读取磁盘数据到内存 es:bx 处
 
    mov al,1    ; 读取的扇区个数
    mov ch,0    ; 磁道号
    mov cl,1    ; 扇区号
    mov dl,0    ; 驱动器号 0 代表软盘 A
    mov dh,1    ; 磁头号,即面号
    mov ah,02H   ; 读命令
    int 13H
 
    ret

五、一些可能有用的代码

在探索过程中整理了一些代码,也许读到本文的人能用到吧。

1. 访问硬盘端口读写数据

在使用 13H 读写磁盘失败后,我搜索到了另外一种读写硬盘数据的方法,就是通过访问 01F0H-01F7H 端口来读写硬盘(共有 CHS LBA24 LBA48 三种模式)。虽然这个方法我的电脑也不能运行成功,不过还是将代码整理在这里吧。

test3:  ; 功能:LBA48 方式读取硬盘数据
        ; 参数:ds:bx 指向接收硬盘数据的内存首地址
 
    push ax
    push dx
    push cx
 
    ;1. 写两次 0x1f1 端口: 0
    mov al,0
    mov dx,01F1H
    out dx,al
    out dx,al
 
    ;2. 写两次 0x1f2 端口:第一次要读的扇区数的高 8 位,第二次低 8 位
    mov al,0H
    mov dx,01F2H
    out dx,al
    mov al,01H
    out dx,al
 
    ;3.0x1f3: LBA 参数的 24~31 位
    mov al,0
    mov dx,01F3H
    out dx,al
 
    ;4.0x1f3: LBA 参数的 0~7 位
    mov al,1
    mov dx,01F3H
    out dx,al
 
    ;5.0x1f4: LBA 参数的 32~39 位
    mov al,0
    mov dx,01F4H
    out dx,al
 
    ;6.0x1f4: LBA 参数的 8~15 位
    mov al,0
    mov dx,01F4H
    out dx,al
 
    ;7.0x1f5: LBA 参数的 40~47 位
    mov al,0
    mov dx,01F5H
    out dx,al
 
    ;8.0x1f5: LBA 参数的 16~23 位
    mov al,0
    mov dx,01F5H
    out dx,al
 
    ;9.0x1f6: 7~5 位,010,40 表示主盘,1 表示从盘,3~0 位,0
    mov al,01000000B
    mov dx,01F6H
    out dx,al
 
    ;10.0x1f7: 0x24 为读,0x34 为写
    mov al,24H
    mov dx,01F7H
    out dx,al
 
    ;11. 读取数据
    mov dx,01F0H
    in ax,dx
    mov ds:[bx],ax
 
    pop cx
    pop dx
    pop ax
 
    ret
;==============================================
test2:  ;chs 方式访问硬盘数据
 
    push ax
    push dx
    push cx
 
    ;1. 向 01F1H 写入 0
    mov al,0
    mov dx,01F1H
    out dx,al
    out dx,al
 
    ;2. 向 01F2H 写入要访问的扇区个数
    mov al,1
    mov dx,01F2H
    out dx,al
 
    ;3. 写入扇区号
    mov al,0
    mov dx,01F3H
    out dx,al
 
    ;4. 写入柱面低 8 位
    mov al,0
    mov dx,01F4H
    out dx,al
 
    ;5. 写入柱面高 8 位
    mov al,0
    mov dx,01F5H
    out dx,al
 
    ;6. 写入 7~5 位,101,40 表示主盘,1 表示从盘,3~0 位,磁头号
    mov al,10110000B
    mov dx,01F6H
    out dx,al
 
    ;7. 传送读写命令
    mov al,20H
    mov dx,01F7H
    out dx,al
 
    ;8. 等待读写完成
    mov dx,01F7H
    s_test2:
    in al,dx
    and al,00010000B
    cmp al,10H
    jne s_test2
 
    ;9. 读取数据
    mov dx,01F0H
    mov cx,256
    s2_test2:
    in ax,dx
    mov ds:[bx],ax
    add bx,2
    loop s2_test2
 
    pop cx
    pop dx
    pop ax
 
    ret
;==============================================
 
test1:  ; 功能:LBA24 方式读取 U 盘中 1 个扇区的数据,并存入 ds:bx 处
    ; 参数:ds:bx 指向接收硬盘数据的内存首地址
 
    ;1. 将访问的扇区个数送入端口
    mov al,01H        ; 参数:要访问的扇区个数
    mov dx,01F2H
    out dx,al
 
    ;2. 将访问的起始扇区的逻辑扇区号送入端口
    mov al,02H      ; 参数:逻辑扇区号 0-7 位
    mov dx,01F3H
    out dx,al
    mov al,00H      ; 参数:逻辑扇区号 8-15 位
    mov dx,01F4H
    out dx,al
    mov al,00H      ; 参数:逻辑扇区号 16-23 位
    mov dx,01F5H
    out dx,al
    mov al,0F0H     ; 参数:高 41 读写模式(1LBA1 硬盘选择(0 为主硬盘) ;低 4 位 逻辑扇区号 24-27 位
    mov dx,01F6H
    out dx,al
 
    ;3. 将读 / 写指令送入端口
    mov al,20H      ; 参数:20H 是读入数据;30H 是写出数据
    mov dx,01F7H
    out dx,al
 
    ;4. 读取硬盘已就绪的状态字节
    mov dx,01F7H
    ready:
    in al,dx
    and al,88H
    cmp al,08H
    jne ready
 
    ;5. 从端口读取 / 写入数据
    mov cx,256
    mov dx,01F0H
    s_test1:
    in ax,dx
    mov es:[bx],ax
    add bx,2
    loop s_test1
 
    ret     
 

2. 保存、复现屏幕内容

这是书上的内容,以后如果换了运行环境,可以重新拿来做个测试。代码如下。

saveScreen:     ; 功能:将当前屏幕上的内容保存在磁盘上
        ; 参数:ah 功能号(3 表示写扇区);al 写入的扇区个数
        ;       ch 磁道号;cl 扇区号(从 1 开始);
        ;       dh 磁头号(面);dl 驱动器号(81H 为硬盘 D 盘)
        ;       es:bx 指向要写入磁盘的数据首地址
        ; 返回:操作成功: ah=0,al = 写入的扇区个数;
        ;       操作失败:ah = 出错代码
 
    push ax
    push es
    push bx
    push cx
    push dx
 
    mov ax,0B800H   ; 参数:es:bx 指向要写入磁盘的数据首地址
    mov es,ax
    mov bx,0
    mov al,8        ; 参数:写入的扇区个数(一屏幕 4000 字节,一个扇区 512 字节,所以需要 8 个扇区)
    mov ch,0        ; 参数:磁道号
    mov cl,1        ; 参数:扇区号,从 1 开始
    mov dh,1        ; 参数:磁头号(面)
    mov dl,81H      ; 参数:驱动器号(D 盘为 81H)
    mov ah,3        ; 参数:功能号 3 表示写扇区
    int 13H         ; 调用 int 13H 中断例程
 
    pop dx
    pop cx
    pop bx
    pop es
    pop ax
 
    ret
;===================================================
 
readScreen:     ; 功能:将磁盘中的内容显示在屏幕上
        ; 参数:ah 功能号(2 表示读扇区);al 读取的扇区个数;
        ;       ch 磁道号; cl 扇区号(从 1 开始);
        ;       dh 磁头号(面);dl 驱动器号(81H 为 D 盘)
        ;       es:bx 指向用于接收磁盘读入的数据的内存区
        ; 返回:操作成功:ah=0 al = 读入的扇区数;
        ;       操作失败:ah = 出错代码
 
    push ax
    push bx
    push cx
    push dx
    push es
 
    mov ax,0B800H   ; 参数:es:bx 指向用于接收磁盘读入数据的内存区
    mov es,ax
    mov bx,0
    mov al,8        ; 参数:读取的扇区个数(一屏幕 4000 字节,需要 8 个扇区)
    mov ch,0        ; 参数:磁道号
    mov cl,1        ; 参数:扇区号,从 1 开始
    mov dh,1        ; 参数:磁头号(面)
    mov dl,81H      ; 参数:驱动器号,81H 为 D 盘
    mov ah,2        ; 参数:功能号,2 表示读扇区
    int 13H         ; 调用 int 13H 中断例程
 
    pop es
    pop dx
    pop cx
    pop bx
    pop ax
 
    ret

总结

这可以说是学习汇编语言以来花费时间最长的一篇博文了。耗时耗力的主要原因,是书籍内容与时代脱节,导致我不得不进行了许多摸索(网上的资料我找过了),绕了很大一个弯,浪费了许多宝贵时间,才最终发现无法走通。一路学习到这最后一章,我对王爽老师的独特教学方法很佩服、很信任。但是这一次的尝试摸索,不禁使我对这本 2019 年 12 月才修订出版过第四版的教材产生了一些失望。

由于第十七章的学习无法完成,后面的课程设计也无法完成了。原本还想继续写几篇关于汇编语言的博文,但现在兴趣索然,故这一篇大概会是这一系列关于汇编语言的博文的最后一篇了。2022.11


VMWare 下安装 MSDN版 MS-DOS 6.22

posted on 2018-01-28 23:34 pchmonster

本文包含以下几部分内容:

  • VMWare 安装
  • MS-DOS 下载
  • 配置 MS-DOS 虚拟机
  • 安装 MS-DOS
  • 安装环境说明
  • MS-DOS 虚拟机共享下载

VMWare 安装

首先要先安装 VMWare 软件,我这里选择的是 VMware-workstation-full-12.1.1-3770994 这个版本,一路 next 即可。

18018

安装完 VMWare 后开始运行,需要注册输入验证码进行激活。

18019

MS-DOS 下载

我们先复习下 DOS 6.22 安装条件和要求,直接去 维基百科 看看介绍吧。

DOS,是磁盘操作系统(英文:Disk Operating System)的缩写,是个人计算机上的一类操作系统。从1981年直到1995年的15年间,DOS在IBM PC兼容机市场中占有举足轻重的地位。

DOS家族包括MS-DOS、PC-DOS、DR-DOS、FreeDOS、PTS-DOS、ROM-DOS、JM-OS等,其中以MS-DOS最为著名。

所有DOS类的操作系统都是在使用Intel x86或其兼容CPU的机器上运行的(主要是IBM PC及其兼容机)。

FreeDOS项目开始于1994年6月26日,当微软宣布不会发售和支持MS-DOS。http://www.freedos.org/

获取 MSDN 版本的 MS-DOS 6.22 (大小 11.23 MB)可以从以下地址下载:

*http://msdn.itellyou.cn/*

获取到的 MS-DOS 6.22 是一个 .exe 结尾的自解压文件,里面内容包含一个 DISKS 文件夹和一个 UPGRADE 文件夹,我们只需要 DISKS 文件夹中的 144UPG1.IMG、144UPG2.IMG144UPG3.IMG。如下图:

18020

配置 MS-DOS 虚拟机

1、在 VMWare Workstations 中选择 【*文件 - 新建虚拟机…* 】,选择【*典型(推荐)(T)* 】类型配置,点击【下一步】;

18021

2、选择【 *稍后安装操作系统(S)* 】选项,点击【下一步】;

18022

3、【客户机操作系统】中选择【*其他* 】,【版本】中选择【*MS-DOS* 】,并点【下一步】继续;

18023

4、给虚拟机起一个名称,并选择虚拟机位置,继续【下一步】;

18024

5、制定磁盘大小,默认建议 *2GB* 即可,因为 MS-DOS 系统不会很大,选择【*将虚拟磁盘存储为单个文件* 】选项,点击【下一步】继续;

18025

6、已经准备好创建虚拟机,虚拟机清单如下图,亦可以【自定义硬件…】,稍后会介绍如何添加软盘驱动器,点击【 *完成* 】就大功告成了。

18026

7、现在在【我的计算机】中出现了刚刚新建的“ MS-DOS 6.22* ”虚拟机,并且在红框中还可以继续编辑虚拟机设置*。

18027

安装 MS-DOS

1、点击“MS-DOS 6.22”虚拟机中的【*编辑虚拟机设置* 】,点击【*添加…*】按钮,如下图:

18028

2、弹出硬件类型窗口,硬件类型选择【 *软盘驱动器* 】,点击下一步;

18029

3、软盘介质类型中选择【 *使用软盘映像* 】,继续下一步;

18030

4、软盘映像选择刚才 MS-DOS 6.22 的 DISKS 目录下的 *144UPG1.IMG* 文件,并勾选【启动时连接】选项,保证虚拟机启动时可以从软盘驱动器启动系统,点击“完成”。

18031

5、软盘驱动器已经添加好了,接下来可以选择“ *开启此虚拟机* ”,运行虚拟机后,自动从软盘驱动器中启动 MS-DOS 的安装程序;

18032

6、我们不能按 Enter 键进行安装,先按 *F3* 退出安装程序,弹出如下对话框,再次按 *F3* 确定退出;

18033

7、成功退出到命令行模式,输入 *fdisk* 命令进行磁盘分区;切记在 A: 盘符下操作;

18034

8、选择【 *1. Create DOS partition or Logical DOS Drive* 】,输入【 *1* 】 回车继续;

18035

9、进入创建分区界面,继续选择【 *1. Create Primary DOS Partition* 】,输入 1 并回车继续;

18036

10、主分区是否使用全部空间,输入【 *Y* 】确定并继续;

18037

11、分区完成,提示系统将重启,按任意键重启即可,重启后会再次进入蓝色的 MS-DOS 安装界面,按两次 *F3* 键退出安装,返回到命令行界面;

18038

12、输入 *format c:* 并回车,提示是否确定格式化,按 *Y* 键继续即可;

18039

13、显示 Format complete. 即完成格式化,系统会提示输入卷标,这里输入 *MSDOS* 就可以;

18040

14、接下来,在 A:> 下输入 *Setup* 命令,进入蓝色的安装画面,直接按 ENTER 键,开始进行 MS-DOS 的安装;

18041

15、提示说安装过程中需要提供一张卷标为 UNINSTALL 1的软盘,我们点击右下角的软盘图标,选择 “*配置…*”;

18043

16、在弹出的配置中,选择“ *使用软盘映像文件* ”,并点击“创建”按钮,输入 *UNINSTALL#1* 文件名后保存即可,这样就创建了一个 UNINSTALL#1 的软盘;

18042

17、回车继续安装,这里可以设置安装路径等信息,确认无误直接 *ENTER* 继续;

18044

18、接下来可以选择安装那些程序,默认就好,直接 *ENTER* 继续;

18045

19、弹出确定对话框,按 *Y* 键开始安装 MS-DOS 6.22;

18046

20、我到了这一步,弹出“ *An error occurred while reading or writing to drive A.*”,原因是我将 UNINSTALL#1 在软驱中放着,我们只要将 Setup Disk #1 (*144UPG1.IMG* )的磁盘放入软驱,选择重试继续;

18047

21、提示插入 UNINSTALL#1,软盘中选择 UNINSTALL#1.flp 文件,然后 ENTER 继续;

18048

22、如果弹出下面的提示框,我们选择 *1.44MB*,按 ENTER 继续;

18049

23、不久又会让你插入*Setup Disk #1* 的磁盘,再然后又让你插入 *UNINSTALL#1* 的磁盘,如此反复几次;

18050

24、安装完 *Setup Disk #1 (144UPG1.IMG)* 以后就会接着提示插入 *Setup Disk #2 (144UPG2.IMG)* 的磁盘,按照之前讲过的更换软盘配置中的磁盘映像文件;

18051

25、接着会提示插入 Setup Disk #3 (144UPG3.IMG)

18052

26、安装完后,会提示移除所有软盘,我们点击 VMWare 右下角的软盘图标,并选择断开设备,然后 *ENTER* 继续;

18053

27、到这里,就已经完全安装完毕,按 *ENTER* 键后重启系统,就可以进入 MS-DOS 6.22 了;

18054

28、重启后,显示 *C:>* 提示符,我们可以输入 *ver* 命令查看版本号,也可以输入 dir 查看下目录结构,其中 *OLD_DOS* 目录为旧系统目录,可以删除;

18055

29、MS-DOS 6.22系统已经完美安装好了,接下来随意玩玩吧,这个版本的 DOS 系统中包含了一个 QBasic,输入 *qbasic* 即可进入。

18056

安装环境说明

  • Windows 10 64位系统 (cn_windows_10_multi-edition_version_1709_updated_dec_2017_x64_dvd_100406696.iso)
  • VMWare Workstation 12 (VMware-workstation-full-12.1.1-3770994.exe)
  • MSDN MS-DOS 6.22 (EN_MSDOS622.exe)

MS-DOS 虚拟机共享下载

现在提供给大家我设置好的 MS-DOS 6.22 虚拟机下载,想体验 DOS,有不想自己配置安装的,可以下载后,在 VMWare 中打开解压后的 .ovf 文件,按提示导入即可.

MSDOS622_VMWare12_OVF.rar (大小 4423KB)


via:

vmware 已于 2023 年 11 月被 broadcom 收购

博通完成收购威睿交易 为全球年内第二大科技业收购案|博通_新浪财经_新浪网
https://finance.sina.com.cn/stock/estate/integration/2023-11-23/doc-imzvqtur7782460.shtml

vmware 官方文档于 2025 年 1 月 30 日停止支持

 

This site will be decommissioned on January 30th 2025. After that date content will be available at techdocs.broadcom.com.

以下引文中文原链接到期后可能不复存在

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值