Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Самый быстрый способ определить подкакой виндой вы находитись (NT или Win9X) на Assemblere

Delphi , ОС и Железо , Windows



Автор: Эдгар
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Самый быстрый способ определить подкакой виндой вы
находитись (NT или Win9X) на Assembler(e)!!!

Самый быстрый способ определить подкакой виндой вы
находитись (NT или Win9X) на Assembler(e)!!!

Зависимости: нет
Автор:       Эдгар, Songoku@tut.by, Берлин
Copyright:   http://www.wasm.ru/
Дата:        23 февраля 2003 г.
***************************************************** }

function isWin9x: Bool; {True=Win9x} {False=NT}
asm
  xor eax, eax
  mov ecx, cs
  xor cl, cl
  jecxz @@quit
  inc eax
@@quit:
end;

Программный код на ассемблерном языке, который определяет, запущен ли системой Windows 9x или NT. Вот разбор того, что код делает:

  1. xor eax, eax - это инструкция инициализирует регистр EAX нулевым значением.
  2. mov ecx, cs - это инструкция перемещает значение регистра CS (кодовый сегмент) в регистр ECX.
  3. xor cl, cl - это инструкция очищает регистр CL.
  4. jecxz @@quit - это инструкция прыгнет к метке @@quit, если значение регистра ECX равно нулю. В Windows 9x значение регистра CS содержит ненулевое значение, поэтому эта инструкция не будет выполнена. В Windows NT значение регистра CS содержит нулевое значение, и прыжок произойдет.
  5. inc eax - если прыжок не был выполнен (т.е., в Windows NT), эта инструкция увеличивает значение регистра EAX до 1.

Рутина возвращает результат сравнения через функцию isWin9x, которая может использоваться другими частями программы для определения, запущена ли система под Windows 9x или NT.

Вот возможное альтернативное решение на ассемблерном языке:

function isWin9x: Bool; {True=Win9x} {False=NT}
asm
  xor eax, eax
  mov ax, fs:[0] ; получить значение FS:0 (обычно 0 для Win9x и ненулевое для NT)
  test ax, ax      ; проверить, является ли это нулевым значением
  jz is_win9x      ; прыгнуть к метке true, если это нулевое значение
  xor eax, eax     ; вернуть false, если это ненулевое значение
is_win9x:
  mov eax, 1       ; вернуть true
end;

Код использует значение FS:0 для определения, запущена ли система под Windows 9x или NT. В Windows 9x это значение обычно равно нулю, а в Windows NT - ненулевое. Рутина возвращает True, если система запущена под Windows 9x, и False в противном случае.

Обратите внимание, что эти решения являются quite low-level и могут не работать на всех системах или архитектурах. Они предназначены для образовательных целей или отладки, где нужна простая, быстрая и легкая реализация.

Самый быстрый способ determine подкакой виндой вы находитесь (NT или Win9X) на Assemblerе - функция isWin9x, которая использует инструкцию jecxz для определения типа операционной системы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:39:11/0.0035209655761719/0