개요

Model specific register (MSR)은 x86 인스트럭션에서 디버깅, 프로그램 실행 조절, 퍼포먼스 모니터링, CPU features의 토글을 위해서 사용되는 Control register의 일종이다.

RDMSR혹은 WRMSR을 통해서 상기한 레지스터를 읽을 수 있고, 접근 할 수 있다. 두 인스트럭션은 Priviledge 명령어이다. 리눅스는 msr-tools라는 패키지를 통해서 권한이 있는 사용자가 MSR값을 읽고 쓸 수 있게 해두었다. RDTSC와 같은 명령어는 MSR 0x10h에 있지만, RDTSC는 예외적으로 Unpriviledge사용자도 이용할 수 있다.

RDMSR 명령은 ECX 레지스터에 제공된 인덱스 값에 의해 결정된 레지스터를 읽는다. 검색된 MSR 값은 EDX와 EAX 레지스터에 저장된다. MSR 값의 상위 32비트는 EDX 레지스터에, 하위 32비트는 EAX 레지스터에 배치된다. 64비트 아키텍처에서는 RDX 및 RAX 레지스터의 상위 32비트가 0으로 설정된다.

WRMSR 명령은 ECX 레지스터에 지정된 인덱스를 가진 레지스터에 값을 쓰기 위해 사용된다. MSR에 쓰여지는 값은 EDX와 EAX 레지스터에서 얻어진다. 구체적으로, EDX의 값은 MSR[63:32] (상위 32비트)에 쓰이며, EAX의 값은 MSR[31:0] (하위 32비트)에 쓰인다.