Index: /trunk/src/VBox/Disassembler/DisasmCore.cpp
===================================================================
--- /trunk/src/VBox/Disassembler/DisasmCore.cpp	(revision 20040)
+++ /trunk/src/VBox/Disassembler/DisasmCore.cpp	(revision 20041)
@@ -717,7 +717,17 @@
             {
             case OP_PARM_C: //control register
-                disasmAddStringF(pParam->szParam, sizeof(pParam->szParam), "CR%d", reg);
                 pParam->flags |= USE_REG_CR;
-                pParam->base.reg_ctrl = reg;
+
+                if (    pCpu->pCurInstr->opcode == OP_MOV_CR
+                    &&  pCpu->opmode == CPUMODE_32BIT
+                    &&  (pCpu->prefix & PREFIX_LOCK))
+                {
+                    pCpu->prefix &= ~PREFIX_LOCK;
+                    pParam->base.reg_ctrl = USE_REG_CR8;
+                }
+                else
+                    pParam->base.reg_ctrl = reg;
+
+                disasmAddStringF(pParam->szParam, sizeof(pParam->szParam), "CR%d", pParam->base.reg_ctrl);
                 return 0;
 
Index: /trunk/src/VBox/Disassembler/DisasmTestA.asm
===================================================================
--- /trunk/src/VBox/Disassembler/DisasmTestA.asm	(revision 20040)
+++ /trunk/src/VBox/Disassembler/DisasmTestA.asm	(revision 20041)
@@ -34,4 +34,6 @@
 align 16
 BEGINPROC   TestProc
+    DB 0xF0, 0x0F, 0x22, 0xC0
+    DB 0xF0, 0x0F, 0x20, 0xC0
     smsw  word [edx+16]
 ;    invept      eax, qword [ecx]
@@ -77,4 +79,12 @@
 align 16
 BEGINPROC TestProc64
+    mov cr8, rax
+    mov cr8, rbx
+    mov [0xfffe0080], rax
+    mov [0xfffe0080], rbx
+    mov rax, cr8
+    mov rbx, cr8
+    mov rax, [0xfffe0080]
+    mov rbx, [0xfffe0080]
     divsd xmm1, xmm0
  ;    invept      rdi, qword [rsi]
