Как проверить байты в ассемблере?

компьютеры программирование программы assembler ассемблер

Задание таково: Получить версию ОС используя функцию DWORD GetVersion(VOID);

Возвращаемое значение:
Ст. бит=0, мл. байт=4 — WinNT;
Ст. бит=0, мл. байт=5 — Win2000/XP;
Ст. бит=1, мл. байт=4 — Win95/98/ME;

Мой вариант программы таков, но он выдает не верный результат, видимо из-за неправильной организации проверки байтов, не могу понять, как правильно её сделать:


.386 ;тип процессора (i386 или старше)
;использование защищенного режима
.model flat,STDCALL ; модель памяти для Win32
;Описание используемых внешних процедур Win32 API:

extrn MessageBoxA:proc ;функция вывода сообщения
extrn ExitProcess:proc ;функция завершения процесса
extrn GetVersion:proc ;функция получения версии ОС

.data ;сегмент данных
title_1 db 'Version OS',0 ;заголовок окна
message_1 db 'WinNT',0 ;текст сообщения
message_2 db 'Win2000/XP',0 ;текст сообщения
message_3 db 'Win95/98/ME',0 ;текст сообщения


.code ;сегмент кода
start:
push 40h ;стиль окна - одна кнопка "OK"
;и пиктограмма "i"

call GetVersion ;вызов функции определения версии ОС
test EAX,80000000h ;проверка старшего бита EAX
jnz metka_3 ;если старший бит 1, переходим по metka_3
and EAX,000000FFh ;обнуляем первые 3 байта
test EAX,00000044h ; если младший байт 4
je metka_1 ;переходим по metka_1
push offset message_2 ;адрес строки с сообщением


push offset title_1 ;адрес строки с заголовком
metka_1:
push offset message_1 ;адрес строки с сообщением
metka_3:
push offset message_3 ;адрес строки с сообщением


push 0 ;дескриптор программы-владельца
;создаваемого окна
call MessageBoxA ;вызов функции вывода сообщения
push 0 ;код завершения программы
call ExitProcess ;вызов функции завершения программы
end Start ;конец сегмента кода
Ответы:
в masm32 это может выглядеть так:


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.