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コマンドラインインターフェイスは、MS-DOSの実際のインスタンスではなく、DOSエミュレータです。Windows8を含むWindowsNTベースのシステムは、5.0バージョンのMS-DOSをエミュレートしているように見えます(これはここここで提案されているようです)-これはあなたの説明と一致しているようです。

于 2013-03-16T02:41:28.537 に答える