0

我在 64 位 AMD 处理器上运行 Windows 8 的 32 位副本。我正在学习 8086 汇编课程,书中给出了如何获取 DOS 版本号的示例。当我启动 cmd.exe 时,它​​在顶部告诉我它是 6.2.9200 版本。此外,当我运行“VER”DOS 命令时,它告诉我同样的事情。但是,当我执行 30H 中断例程以获取 DOS 版本号时,它告诉我我正在运行 DOS 版本 5.0。什么可以解释这种差异?

顺便说一句,我使用命令在 MASM6 中组装了以下代码ML /Fl DOSVER.ASM

   .MODEL SMALL
   .DATA
   VNS    DB  'DOS Version $'

   .CODE
   .STARTUP
   LEA   DX,VNS     ;set up pointer to output string
   MOV   AH,9       ;display string
   INT   21H        ;DOS call
   MOV   AH,30H     ;get DOS version number
   INT   21H        ;DOS call
   PUSH  AX         ;save copy of version number
   ADD   AL,30H     ;add ASCII bias to major version number
   MOV   DL,AL      ;prepare for output
   MOV   AH,2       ;output character to screen
   INT   21H        ;DOS call
   MOV   DL,'.'     ;load a period
   MOV   AH,2       ;output character to screen
   INT   21H        ;DOS call
   POP   AX         ;get version number back
   MOV   AL,AH      ;load minor version number
   MOV   BL,10      ;divide minor version number by 10
   SUB   AH,AH
   DIV   BL
   ADD   AL,30H     ;add ASCII bias
   MOV   DL,AL      ;prepare for output
   MOV   AH,2       ;output character to screen
   INT   21H        ;DOS call
   .EXIT

   END
4

1 回答 1

1

您在命令行界面顶部看到的由VER命令返回的版本号是 Windows 版本,而不是DOS版本。据我了解,Windows 命令行界面是一个 DOS 模拟器,而不是 MS-DOS 的实际实例。似乎基于 Windows NT 的系统(包括 Windows 8)模拟了 5.0 版本的 MS-DOS(这似乎在此处此处被建议)——这似乎与您所描述的一致。

于 2013-03-16T02:41:28.537 回答