CPUID를 사용하려하지만 일부 문자열이 첨부되어 있습니다. sandpile.org's CPUID page에 따르면 CPUID 표준 기능 0000_0004h 이상은 MISC_ENABLE.LCMV 플래그가 0으로 설정된 경우에만 작동합니다.이 플래그는 모델 별 레지스터 (MSR) 1A0의 비트 22입니다. 외관상으로는,이 한계는 Windows NT의 버그로 인한 것입니다 (Microsoft에서 일을 쉽게 해주셔서 감사합니다.)).CPUID : 일부 기능의 경우 MISC_ENABLE.LCMV를 0으로 설정해야하는 이유는 무엇입니까? 임시로 덮어 쓸 수 있습니까?
CPUID 0000_0001h (ecx 플래그, 비트 3)로 LCMV 플래그가 있는지 테스트 할 수 있습니다. 그것이 있다고 가정하면, 정확히 무엇이며, CPUID에 왜 그렇게 영향을 미칩니 까? MSR 1A0은 읽기/쓰기 레지스터 또는 읽기 전용입니까? 이러한 특수 용도 레지스터는 어셈블리 코드를 사용하여 읽거나 쓰는 방법은 무엇입니까?
레지스터가 기술적으로 읽기/쓰기 인 경우 원래 설정으로 복원하기 전에 CPUID 명령어 기간 동안 비트 22를 0으로 재설정해도 안전합니까? 또는 잘못 설정된 경우 (즉, 사용하도록 설정 한 경우)
마지막으로 sandpile은 "이 수준은 MISC_ENABLE.LCMV가 0으로 설정된 경우에만 사용 가능합니다."라는 문구를 사용합니다. 이는 Windows NT 버그 때문입니다. 이런 이유로 표준 수준의 묶음을 특별히 비활성화하면 CPUID 수준 0000_000h의 eax 레지스터 (지원되는 최대 표준 수준)의 출력에 반영됩니까?
Phew ... 나는 그것에 대해 생각합니다.
굉장합니다. 정말 고맙습니다! 귀하의 대답은 정말로 최선의 시나리오입니다. 왜냐하면 그것이 정말로 필요하지 않으면 비트가 설정되지 않기 때문입니다. Windows NT에서. Windows NT에서 CPUID와 잘 작동하지 않는 일부 (대부분 직교) 프로세서 기능이 활성화되었음을 알 수있었습니다. 나는 그것이 사실이 아니기 때문에 기쁘다. :) –