2013-03-16 3 views
0

Я запускаю 32-битную копию Windows 8 на 64-разрядном процессоре AMD. Я беру курс сборки 8086, и в книге приведен пример того, как получить номер версии DOS. Когда я запускаю cmd.exe, он говорит мне, что это версия 6.2.9200. Кроме того, когда я запускаю команду «VER» DOS, она говорит мне то же самое. Однако, когда я выполняю процедуру прерывания 30H для получения номера версии DOS, он сообщает мне, что я запускаю DOS версии 5.0. Что может объяснить это различие?Прерывание 30H дает неправильную версию DOS

Кстати, я собрал код ниже в 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 
+0

'' '; добавить ASCII bias''' - Хммм, вы инженер-электрик? –

+0

Я изучаю для своего B.S. в EET. – JJBladester

+0

Хи, хи, я доволен собой. :) Ничего плохого в вашем коде или комментариях - но я предполагал, что человек со статусом Maths или CS написал бы «смещение». ;) –

ответ

1

Номер версии вы видите в верхней части интерфейса командной строки, и который возвращается командой VER, является версией для Windows, а не версия DOS. Насколько я понимаю, интерфейс командной строки Windows является эмулятором DOS, а не фактическим экземпляром MS-DOS. Похоже, что системы на базе Windows NT, которые будут включать Windows 8, будут эмулировать версию MS-DOS 5.0 (кажется, это предложено here и here), что, похоже, согласуется с тем, что вы описываете.

+0

Я вижу проблему ... Windows 8 была выпущена на производство 1 августа 2012 года со сборкой 6.2.9200 (да, это версия для Windows). Есть ли команда для отображения версии DOS? – JJBladester

+0

Из того, что я вижу, вы, вероятно, придерживаетесь того, что вам предлагает программа сборки. Строго говоря, вы работаете в эмуляторе DOS, а не в реальной среде DOS, поэтому верная версия - это то, что возвращается из команды 'VER', и то, что вы int 21h, AX = 30h возвращается, является версией DOS, которая имитирует окна. Из того, что я вижу в некоторых предыдущих версиях Windows, были способы получить «эмулированную» версию, но ничто, кажется, не выпрыгивает за более свежие версии, хотя я рад, что исправлен, если есть команда сделать это ! – Michael