Я запускаю 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
'' '; добавить ASCII bias''' - Хммм, вы инженер-электрик? –
Я изучаю для своего B.S. в EET. – JJBladester
Хи, хи, я доволен собой. :) Ничего плохого в вашем коде или комментариях - но я предполагал, что человек со статусом Maths или CS написал бы «смещение». ;) –