我在 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