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