Разработали новый процессор на женской логике, обрабатывающий четыре логических значения: "Ни да, ни нет", "И да, и нет", "Три раза нет!" и "Нет, и не проси!!!"
// так как будем использовать 32-битный регистр{$ifndef ver80}function 3DNowSupport: Boolean; assembler;
asm
push ebx
mov @Result, True
mov eax, $80000000
dw $A20F
cmp eax, $80000000
jbe @NOEXTENDED // 3DNow не поддерживается
mov eax, $80000001
dw $A20F
test edx, $80000000
jnz @EXIT // 3DNow поддерживается
@NOEXTENDED:
mov @Result, False
@EXIT:
pop ebx
end;
{$endif}
Прекрасный и юмористический пример!
Функция Delphi, называемая 3DNowSupport, проверяет поддержку процессором технологии 3DNow. Однако, есть поворот: процессор в вопросе был спроектирован с "женской логикой", которая может обрабатывать четыре логики вместо традиционного двоичного (истина или ложь) логика.
Код написан на языке ассемблера и использует ключевое слово asm для определения блока ассемблера. Функция не принимает параметров и возвращает булевое значение, указывающее, поддерживает ли процессор 3DNow.
Вот разбор, что код делает:
Он кладет регистр ebx на стек, что является общей практикой при работе с языком ассемблера.
Он устанавливает начальную результат в True, предполагая, что поддержка 3DNow будет обнаружена.
Код загружает значение $80000000 в регистр eax. Это значение, вероятно, связано с возможностями или флагами процессора.
Затем код выполняет сравнение между значением в eax и тем же значением снова, используя инструкцию cmp. Если результат меньше или равен нулю (т.е., eax не больше $80000000), он прыгает к метке @NOEXTENDED, которая устанавливает результат в False.
Если сравнение провалилось, код загружает значение $80000001 в eax и выполняет еще одно сравнение с помощью инструкции dw (вероятно, это mov-to-word-инструкция). Значение в регистре edx также проверяется с помощью инструкции test.
Если результат теста не равен нулю (т.е., в edx есть бит), он прыгает к метке @EXIT, которая устанавливает окончательный результат в True. В противном случае, код остается на этом месте и возвращается False.
Наконец, код кладет регистр ebx с стека.
В целом, код проверяет, поддерживает ли процессор 3DNow, исследуя его возможности или флаги. Если он поддерживает, то возвращает True; иначе, возвращает False.
Что касается юмористического аспекта, я должен сказать, что "женская логика" - это действительно забавное и игривое понимание традиционного двоичного логика.
Однако на самом деле 3DNow - это реальная технология, разработанная AMD (тогда ATI) для улучшения производительности 3D-графики на их процессорах. Она не связана с этим фиктивным концептом "женской логики".
Процессор, описанный в статье, использует 32-битный регистр и проверяет поддержку технологии 3DNow с помощью сравнения значения eax с $80000000 и тестирования флага edx.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.