目录

[Original] 汇编学习环境部署过程曲折记录

目录

这一期要学习的课程是《微型计算机与接口技术》,核心内容是汇编语言,学习之前准备开发环境是第一要务。

教材学习的汇编语言主要针对早期的 8086 这一代硬件系统,如今的操作系统和硬件环境已经不符合当时的条件。所以应该是需要老一些的环境调节才能满足需要。

因为之前搞各种开发环境把操作系统弄得乱七八糟,后来甚至无法正常工作,所以刚刚重装的系统已经不打算再胡乱部署开发环境。

最初想在 WSL 里的 Linux 环境学习使用,找到对应的是 nasm 汇编语言环境。安装部署之后试了网上的测试代码确认可以正常工作,但试着输入教程里的代码就各种出错,还都是自己看不懂的。试着查阅资料才知道这个编译器和 masm 很多命令和指令格式都不一样,显然不适合我这个初学者。

自从知道 Windows 自带 Hyper-V 虚拟机就再没用其他的虚拟机软件,虽然功能简单胜在使用方便。虚拟机先安装了官方自带的 Windows 10 环境,开始在这个环境里准备部署开发环境。

先是依照网上的教程,自己下载了 DOSbox 和别人打包放在网盘下载的 masm 汇编编译工具压缩包。当时我也不明白为什么 masm 没有官方网站的下载包,后来才知道这是多年前就已经废弃的版本,下载的压缩包是别人从历史版本里抽取的可执行文件打包。配置编译工具加载到 DOSbox 环境中,验证安装教程中的简单演示代码编译运行通过。这个环境着实不好用,查阅资料过程中还找到一个专门的 EMU8086 环境汇编模拟器,试用了一下似乎效果也还不错,最重要是可以在 Windows 下直接运行,还能显示内存状态,似乎很方便调试学习。

高兴不久就遇到问题,我用教程里的示范代码在两个环境里都不能正常编译,错误信息也不明白是什么问题。连续试了两个代码段都不行,错误信息不同但结果都是无法编译,反复排查也没有发现什么问题。经过一段没头脑的折腾之后误打误撞把第一段代码编译执行通过,错误原因居然是书上印错了,两处变量名称和命令没有用空格分开,让我这个初学者走了不少弯路。至少说明环境没有问题,但第二段代码依然始终搞不定,查阅提示异常的信息也没有明确结果。最后拿着书翻来覆去找说明终于在一个不显眼的地方提到建议使用 masm 6.11 以上版本,否则部分指令可能无法支持。

赶快查阅环境版本,DOSbox 里是个五点几的版本显然不够, EMU8086 上没有找到编译版本但也肯定不高。

网上找到一个 masm615 的版本,这时已经知道这是微软将汇编编译器集成到 VSS 之后的最后一个版本,现在也已经终止服务很多年了。VSS 我是万万不想用的,之前折腾开发环境时就知道这大约是各种开发工具里最臃肿、最繁杂的一个。

masm 部署到虚拟机,按照之前的方式在 DOSbox 里运行却报错,提示不能在 DOS 盒内运行。试着在虚拟机 CMD 里运行居然成功了,但试着编译程序运行时提示不支持 64 位环境。只好又到处找 32 位环境,找半天发现系统内似乎没有解决方案,只有重新安装一个 32 位操作系统的虚拟机。

想起多年前知道有个 Windows XP 的专用虚拟机文件,可以下载直接用。网上搜索一圈发现官方早就没有了,但还有国外网站提供了下载链接。下载之后无法直接使用,又找到文章说可以解压出里面的虚拟磁盘文件挂载到虚拟机使用。按照教程折腾一圈之后终于架起一台 Windows XP 虚拟机。然后却发现在 Hyper-V 里几种有效的主机和虚拟机互通文件的方式在 Windows XP 上都不能用,网上试了几个方法也不大好用,最后只找到一个用 PowerShell 命令行传输单个文件的方法,至少能把开发环境的压缩包传进虚拟机。又是一通安装配置之后终于确定可用,教材代码也终于能运行了。可是这个 Windows XP 虚拟机无法互传文件这件事后续可能的问题太多,还是需要新版才行。

又下载了 Windows 10 的 32 位版本镜像文件,又发现在 Hyper-V 里无法引导安装。也是找了很多解决方法都不能成功解决,最后在一个答疑网页看到有提到可以尝试使用“一代”虚拟机。到处找也没有找到这个“一代”的配置,最后才发现如果不使用界面上显要位置的“快速创建”,而使用普通虚拟机创建过程会有选择几代的选项,选项说明提到只有“一代”支持 32 位操作系统。

终于能够启动安装 32 位系统,进入之后又提示授权无法通过,反复多次试了很多组授权码也无法通过。网上查阅类似问题知道是内存设置不符合系统需要造成的错误,参考说明取消了“动态内存”并且设置内存数量为“2048M”之后终于可以正常安装系统。

千辛万苦装好 32 位 Windows 10 系统,又一次安装配置好 masm615 的汇编编译环境,找来一段测试代码终于通过。

这一次折腾曲曲折折经过一周多各种折磨,现在还不敢说是不是已经全部解决,至少解决了大部分问题已经见到曙光。

特此记录。