Если это установлено в соответствии с результатом, это от младших 8 битов. например add ax, bx
устанавливает PF в соответствии с AL.
1112 Однако не все инструкции делают это. Обратитесь к руководству. Например, mul
https://www.felixcloutier.com/x86/mul оставляет PF неопределенным.
Кстати, название вашего вопроса совсем не соответствует вашему вопросу. Чтобы проверить PF, вы должны использовать такую инструкцию, как jp
или jnp
или lahf
/ and ah, 1<<2
, чтобы сохранить флаги в AH, а затем AND, чтобы изолировать PF немного. https://en.wikipedia.org/wiki/FLAGS_register
Или на более поздних процессорах, setp al
или cmovp eax, edx
также могут быть вариантами.
Я не уверен, что необходимо проверить, выполняется ли сценарий под x64.
Попытайтесь читать из HKLM\Software\Wow6432Node\xyz
, если это перестало работать, попытайтесь читать из HKLM\Software\xyz
, если это перестало работать, Ваш ключ реестра не существует, принимает любые меры, является соответствующим.
Конечно, если Ваш дизайн более сложен (например, Вы пишете значение в тот ключ реестра, если это не существует), затем, что предложение не будет работать.
Вот VBScript для исследования операционной системы. Вам, вероятно, также будет нужно объяснение Свойств, доступных от Класса Win32_OperatingSystem
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
msg = objOperatingSystem.Caption & " " & _
objOperatingSystem.Version & " " & _
objOperatingSystem.OSArchitecture
msgbox msg
Next
Обратите внимание на это Windows XP и 2003, OSArchitecture
не доступно, в этом случае необходимо будет, вероятно, исследовать любого Caption
или Version
определить, является ли Ваша ОС 64-разрядной.
Вы могли также использовать что-то вроде этого в зависимости от уровня сложности, которой Вы требуете.
Вы не упомянули, какой API вы используете для чтения из реестра. Например, если вы используете класс StdRegProv
WMI, вы можете использовать флаг __ProviderArchitecture
для запроса доступа к 32-битной ветке реестра независимо от того, запущен ли сценарий под 32-битным или 64-битным Windows Script Host. Эта техника описана в статье Запрос данных WMI на 64-битной платформе в MSDN.
Вот пример чтения из 32-битного реестра:
strComputer = "."
Const HKLM = &h80000002
''# Specify the required registry bitness
Set oCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
oCtx.Add "__ProviderArchitecture", 32
oCtx.Add "__RequiredArchitecture", True
''# Load the 32-bit registry provider
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oWMI = oLocator.ConnectServer(strComputer, "root\default",,,,,, oCtx)
Set oReg = oWMI.Get("StdRegProv")
''# Specify input parameters for the GetStringValue method call
Set oInParams = oReg.Methods_("GetStringValue").InParameters
oInParams.hDefKey = HKLM
oInParams.sSubKeyName = "Software\xyz"
oInParams.sValueName = "foobar"
''# Read a string value from the registry
Set oOutParams = oReg.ExecMethod_("GetStringValue", oInParams,, oCtx)
WScript.Echo oOutParams.sValue
Заметим также, что в данном случае имена 32-битных ключей должны быть указаны обычным образом HKLM\Software\xyz
вместо HKLM\Software\Wow6432Node\xyz
.