[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 的汇编编译环境,找来一段测试代码终于通过。
这一次折腾曲曲折折经过一周多各种折磨,现在还不敢说是不是已经全部解决,至少解决了大部分问题已经见到曙光。
特此记录。