Assembly 30小时中断给出错误的DOS版本

Assembly 30小时中断给出错误的DOS版本,assembly,masm,x86-16,Assembly,Masm,X86 16,我正在64位AMD处理器上运行Windows 8的32位副本。我正在学习8086汇编课程,这本书给出了一个如何获取DOS版本号的示例。当我启动cmd.exe时,它在顶部告诉我它是版本6.2.9200。另外,当我运行“VER”DOS命令时,它告诉我同样的事情。然而,当我执行一个30小时的中断程序来获取DOS版本号时,它告诉我我正在运行DOS版本5.0。什么能解释这种差异 顺便说一下,我使用命令ML/Fl DOSVER.ASM在MASM6中组装了下面的代码 .MODEL SMALL .D

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

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

   .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

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

;添加ASCII偏差
-嗯,你是电气工程师吗?我正在攻读电子工程学士学位。嘿嘿,我对自己很满意。:)你的代码或注释没有问题——但我猜一个有数学或计算机科学背景的人会写“偏移量”。)我看到问题了。。。Windows 8于2012年8月1日发布,版本为6.2.9200(是的,它是Windows版本)。是否有显示DOS版本的命令?从我所看到的,您可能一直在使用汇编程序提供的内容。。严格地说,您是在DOS仿真器中工作,而不是在实际的DOS环境中工作,因此“正确”版本是从
VER
命令返回的,而int 21h,AX=30h返回的是windows正在模拟的DOS版本。从我在一些以前版本的Windows中看到,有很多方法可以获得“模拟”版本,但对于较新的版本,似乎没有什么东西跳出来-尽管如果有命令可以做到这一点,我很高兴得到纠正!