在 MS-DOS 7 下进行系统编程的第一步/介绍
介绍
如今,Windows-2000/XP 操作系统的窗口已经成为家居内饰的熟悉景象。你在那里寻找工作和娱乐。人们很容易对能够访问所有东西产生一种印象。但这是一个骗人的印象:所有计算机奇迹的真正起源是无法通过这些窗口看到的。
每个高级用户都会意识到 Windows 操作系统设置的一道虚拟边界,阻止他们侵入其内部事务。如果你想更深入地了解计算机,你必须选择一条通往熟悉窗口之外的路。但窗户外面是黑暗,没有可见的支点可以支撑。如果你仍然渴望走得更远,那么这本书正是为你准备的。
所有计算机的奇迹都是由程序实现的。更准确地说,是应用软件和系统软件的复杂交互,每个软件都扮演着各自的角色。例如,众所周知的 WORD 编辑器程序是一个典型的应用程序,因为它需要由 Windows 操作系统提供的运行时环境。另一方面,系统软件是创建、配置和维护操作环境的软件。
现在,人们对应用程序编程给予了极大的关注。微软公司,Windows 操作系统的拥有者,积极推广其 VISUAL STUDIO 软件包,该软件包包含几种用于编写应用程序的高级语言。微软的兴趣是显而易见的:需要的 Windows 操作系统应用程序越多,销售的 Windows 使用许可证就越多。
对系统编程的态度却截然相反:领先的软件供应商决心阻止任何竞争系统产品的出现。获得系统数据的权利只授予可靠的商业合作伙伴,并非每家公司都能负担得起这种支出。公认的信息政策不鼓励人们关注系统编程,但系统编程的重要性并没有因此而降低。没有系统编程的知识和经验,就不能成为计算机技术领域的真正专业人士。
系统软件不仅仅局限于操作系统。它还包括硬件驱动程序、固定的 BIOS 程序、各种诊断和恢复服务。研究这些软件功能一直是计算机技术教育的重要内容。传统上,系统编程是在 Microsoft DOS(MS-DOS)的文档版本下基于低级汇编语言(MASM 或 TASM)进行教学的。
现在,所有文档化的 MS-DOS 版本都已过时,甚至无法访问现代计算机中使用的海量存储介质。更新的操作系统保护自己免受任何试图侵入其事务的尝试,并用一个已知的错误消息“您的程序执行了非法操作,必须关闭”来回应。然而,一个可接受的解决方案是存在的。它是一个未记录的操作系统,可以安装在现代计算机上,并允许执行任何操作。本书的主要目的是让您了解该操作系统及其在解决简单系统任务方面的应用。
防止执行不可接受的函数是通过处理器(CPU)内部的硬件实现的,并且在 CPU 以保护模式运行时处于活动状态。除了保护本身之外,保护模式还提供了几个重要的优势,这就是它成为现代 CPU 主要操作模式的原因。对于应用程序和用户来说,保护模式类似于一个虚拟外壳,它禁用所有可能对操作系统重要功能造成损害的操作。这是现代操作系统固有的高可靠性的主要因素。
与保护模式相反,实模式是一个“无防御”模式,它使 CPU 模仿过时的处理器 i8086。人们可能会想知道为什么这个过时的功能在每个 CPU 的下一代中都得到保留,而没有被放弃?只有一个原因:实模式对现代计算机系统是必要的。首先,实模式是 BIOS 所需要的:它必须能够自由访问计算机硬件以执行 POST 测试。正是由于这项任务,每个处理器在每次电源打开时都自动设置为实模式。操作系统也不能获得对计算机硬件的控制权,除非保护被禁用,因此必须在 CPU 以“无防御”的实模式运行时启动。
Windows 克隆的操作系统完全控制了计算机后,准备保护数据结构,以便在切换到保护模式后,将最高特权级别授予 Windows 操作系统本身,而用户和应用程序则被赋予第三(最低)特权级别。从那时起,用户将永远无法更改这种权利分配。由于同样的原因,在保护模式下,所有超出 Windows API 限制的机会对用户及其应用程序都变得不可访问。
如今,普通用户的实践并不意味着拥有超越保护模式固有限制的行为经验。现代操作系统的基本概念是用户和系统责任范围之间的区别。过度的用户好奇心被认为是破坏性的,应该被抑制。保护模式并没有证明它对恶意病毒的有效性;它提供了一种有效的保护……防止你。
如果操作系统允许在实模式下运行应用程序,它就不可能像使用保护模式的操作系统那样稳定。这就是为什么老式的 DOS 类操作系统被更现代的操作系统取代的主要原因。但普通的评级对经常需要无限访问权限的紧急服务无效。那么,DOS 类操作系统的主要缺点就变成了它们独特的优势。因此,计算机专业人员并没有忘记 DOS。所有可启动软盘(修复、诊断、磁盘服务等)都需要操作系统并只加载 DOS。大多数可启动光盘也是基于 DOS 的。此外,DOS 是最简单的操作系统,正因为如此,它最适合用于系统功能的入门学习。
虽然 DOS 通常被认为是一个实模式操作系统,但这种观点并不完全正确。DOS 最初在实模式下运行,但它不会反对驱动程序 (5.04-02) 或用户进行的模式更改。因此,您获得了将最高特权级别分配给自己的独特机会。只有在后一种情况下,CPU 才会服从您的任何命令,包括那些只允许在保护模式下以最高特权级别执行的命令。没有其他操作系统会将最高权限转移给用户。只有 DOS 才能在实模式和保护模式下都为您提供完全的行动自由。
对实模式访问的实际需求迫使软件供应商继续开发 DOS 类操作系统。独立的 FreeDOS 项目正在缓慢地走向完成 ( http://www.freedos.org/ )。最近出现了一个名为 ROM-DOS 的商业版本 ( http://www.datalight.com/ )。一些不太新的共享软件版本也找到了感兴趣的消费者。为了为过时的 DOS 版本(MS-DOS 6.22、IBM PC DOS 2000 等)提供新的属性,包括访问具有广泛文件系统 FAT-32 和 NTFS 的磁盘,编写了大量驱动程序。但驱动程序没有集成到 DOS 的核心,因此无法将 DOS 安装到此类磁盘上。
如果您曾经胆敢购买一台没有预装商业操作系统的计算机,您几乎肯定会发现那里有一个典型的 DOS 提示符和一个用 FAT-32 格式化的硬盘驱动器 (HDD)。最有可能的是,上面提到的 DOS 版本与之无关。计算机初始化通常使用微软在 Windows-95/98 操作系统的紧急软盘上提供的工具完成。在形式上,它被称为“只使用命令行”的加载模式。
然而,简单的检查表明,“只使用命令行”模式并不像 Windows 操作系统,而更像是一个典型的 DOS 版本。在紧急软盘上的几乎每个文件代码中,您都可以找到证据 - 一个字符串“MS-DOS Version 7...” 。MS-DOS 的第 7 版正是微软的这个未记录的操作系统,它是本书的主要主题。对于从 Windows-95 OSR2 版本中获取的 MS-DOS,函数 INT 21\AH=30h (8.02-22) 报告了精确的版本号 07.0Ah,或十进制 7.10。正是这个版本在本文中被称为 MS-DOS 7。
MS-DOS 7 不是 MS-DOS 的最新版本。Windows-ME 版本基于 MS-DOS 8。MS-DOS 8 经过重新编译以适应现代 CPU,变得更加紧凑,但与一些 486 CPU 克隆失去了兼容性。此外,它在 Windows-ME 加载过程中没有发挥积极作用,因此无法实现不同的加载方案。但 MS-DOS 8 的其他功能与 MS-DOS 7 相似,因此本书中的大多数数据对两者都适用。每个例外都将明确指出。
系统编程是一个庞大的主题;它的叙述往往会超出所有可承受的范围。因此,本书不假装完整:一些大型主题(特别是网络)已被有意排除在外。其他一些项目简要提及,只要足以理解即可。
本书的第 1-4 章让读者熟悉键盘、命令行组成和内部命令。这些简短的章节针对的是以前从未接触过 MS-DOS 7 的新手。
第 5 章描述了计算机硬件的重要驱动程序,包括 2004-2008 年间由各种软件供应商开发的最新驱动程序。第 6 章介绍了针对 MS-DOS 7 的一些实用程序的调查。特别关注的是编程工具 DEBUG.EXE - 未记录 DOS 中记录最差的实用程序。
第 7 章专门介绍 DEBUG 的汇编器命令。第 8 章描述了可以通过中断在 MS-DOS 7 中调用的各种服务。
第 9 章提供了使用 Windows-95/98 标准版本的工具进行编程的示例。示例将帮助您根据需要编写自己的可解释和可执行文件。提供的示例选择说明了在 MS-DOS 7 中可用的机会范围,如果正确提出要求。
最后一章(“A”)包含 16 个主题附录,其中包含大量数据表格,涉及 MS-DOS 7 和 AT 兼容 PC。最后一个(第 16 个)附录是词汇表,解释了本书中使用的缩写。
长期以来,领先的软件供应商一直灌输对操作系统进行硬性推销,这阻碍了用户访问实模式。但 OS/2(IBM,1989 年)和 Windows-NT(Microsoft,1994 年)的销量都不佳。下一次尝试 - Windows-2000 - 开启了利用 FAT-32 格式化磁盘上 DOS 服务的机会。一旦 Windows-2000 的成功变得显而易见,微软就决定消灭整个竞争对手 Windows-95/98/ME 家族。然而,这一决定并没有消除对实模式的需求,也没有提供替代的实模式工具。我建议将微软的这一决定视为一项保证,即您今天对 MS-DOS 7 的学习不会因明天出现任何更好的 MS-DOS 版本而白费。
2002 年,英特尔开发并开始生产 Itanium CPU,它不支持老式的 16 位机器代码,这为更新带来了另一个挑战。所有以前的实模式工具,包括 MS-DOS 7,都可能随着即将出现的带有 32 位 BIOS 代码的新 PC 而变成垃圾,那么这本书就不值得写了。七年过去了,但预期中的奇迹并没有发生。配备 Itanium CPU 的公共 PC 还没有出现。不得不承认,所有更新的 CPU 中保留对 16 位代码的支持一定是有原因的。只要这些原因存在,DOS 的经验对您来说仍然是有益的。
如何启动 MS-DOS 7?如果 Windows-95/98 已经安装,只需在 PC 启动操作系统时一直按住 F8 键,您就会进入引导菜单;然后选择“仅命令行”选项,您就到了。否则,您需要获取 Windows-95/98 紧急软盘,并使用该软盘启动 PC。可以在许多互联网网站上找到可引导软盘的合适映像,例如,在 http://www.bootdisk.com/ 。标准加载过程会让您获得“原始”DOS 的命令行。如果您遵循本书第 6.25 和 9.01 部分的建议,MS-DOS 7 可能会显得更加方便和友好。第 9.11 部分建议了一些启动 MS-DOS 7 的其他方法,包括与 Windows 操作系统共享同一个磁盘的方法。