ia32-64/x86/vmptrst.html
2025-07-08 02:23:29 -03:00

123 lines
4.8 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg" xmlns:x86="http://www.felixcloutier.com/x86"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="style.css"></link><title>VMPTRST
— Store Pointer to Virtual-Machine Control Structure</title></head><body><header><nav><ul><li><a href='index.html'>Index</a></li><li>December 2023</li></ul></nav></header><h1>VMPTRST
— Store Pointer to Virtual-Machine Control Structure</h1>
<table>
<tr>
<th>Opcode/Instruction</th>
<th>Op/En</th>
<th>Description</th></tr>
<tr>
<td>NP 0F C7 /7 VMPTRST m64</td>
<td>M</td>
<td>Stores the current VMCS pointer into memory.</td></tr></table>
<h2 id="instruction-operand-encoding">Instruction Operand Encoding<a class="anchor" href="#instruction-operand-encoding">
</a></h2>
<table>
<tr>
<td>Op/En</td>
<td>Operand 1</td>
<td>Operand 2</td>
<td>Operand 3</td>
<td>Operand 4</td></tr>
<tr>
<td>M</td>
<td>ModRM:r/m (w)</td>
<td>NA</td>
<td>NA</td>
<td>NA</td></tr></table>
<h2 id="description">Description<a class="anchor" href="#description">
</a></h2>
<p>Stores the current-VMCS pointer into a specified memory address. The operand of this instruction is always 64 bits and is always in memory.</p>
<h2 id="operation">Operation<a class="anchor" href="#operation">
</a></h2>
<pre>IF (register operand) or (not in VMX operation) or (CR0.PE = 0) or (RFLAGS.VM = 1) or (IA32_EFER.LMA = 1 and CS.L = 0)
THEN #UD;
ELSIF in VMX non-root operation
THEN VMexit;
ELSIF CPL &gt; 0
THEN #GP(0);
ELSE
64-bit in-memory destination operand := current-VMCS pointer;
VMsucceed;
FI;
</pre>
<h2 id="flags-affected">Flags Affected<a class="anchor" href="#flags-affected">
</a></h2>
<p>See the operation section and Section 31.2.</p>
<h2 class="exceptions" id="protected-mode-exceptions">Protected Mode Exceptions<a class="anchor" href="#protected-mode-exceptions">
</a></h2>
<table>
<tr>
<td rowspan="4">#GP(0)</td>
<td>If the current privilege level is not 0.</td></tr>
<tr>
<td>If the memory destination operand effective address is outside the CS, DS, ES, FS, or GS segment limit.</td></tr>
<tr>
<td>If the DS, ES, FS, or GS register contains an unusable segment.</td></tr>
<tr>
<td>If the destination operand is located in a read-only data segment or any code segment.</td></tr>
<tr>
<td>#PF(fault-code)</td>
<td>If a page fault occurs in accessing the memory destination operand.</td></tr>
<tr>
<td rowspan="2">#SS(0)</td>
<td>If the memory destination operand effective address is outside the SS segment limit.</td></tr>
<tr>
<td>If the SS register contains an unusable segment.</td></tr>
<tr>
<td rowspan="2">#UD</td>
<td>If operand is a register.</td></tr>
<tr>
<td>If not in VMX operation.</td></tr></table>
<h2 class="exceptions" id="real-address-mode-exceptions">Real-Address Mode Exceptions<a class="anchor" href="#real-address-mode-exceptions">
</a></h2>
<table>
<tr>
<td>#UD</td>
<td>The VMPTRST instruction is not recognized in real-address mode.</td></tr></table>
<h2 class="exceptions" id="virtual-8086-mode-exceptions">Virtual-8086 Mode Exceptions<a class="anchor" href="#virtual-8086-mode-exceptions">
</a></h2>
<table>
<tr>
<td>#UD</td>
<td>The VMPTRST instruction is not recognized in virtual-8086 mode.</td></tr></table>
<h2 class="exceptions" id="compatibility-mode-exceptions">Compatibility Mode Exceptions<a class="anchor" href="#compatibility-mode-exceptions">
</a></h2>
<table>
<tr>
<td>#UD</td>
<td>The VMPTRST instruction is not recognized in compatibility mode.</td></tr></table>
<h2 class="exceptions" id="64-bit-mode-exceptions">64-Bit Mode Exceptions<a class="anchor" href="#64-bit-mode-exceptions">
</a></h2>
<table>
<tr>
<td rowspan="2">#GP(0)</td>
<td>If the current privilege level is not 0.</td></tr>
<tr>
<td>If the destination operand is in the CS, DS, ES, FS, or GS segments and the memory address is in a non-canonical form.</td></tr>
<tr>
<td>#PF(fault-code)</td>
<td>If a page fault occurs in accessing the memory destination operand.</td></tr>
<tr>
<td>#SS(0)</td>
<td>If the destination operand is in the SS segment and the memory address is in a non-canonical form.</td></tr>
<tr>
<td rowspan="2">#UD</td>
<td>If operand is a register.</td></tr>
<tr>
<td>If not in VMX operation.</td></tr></table><footer><p>
This UNOFFICIAL, mechanically-separated, non-verified reference is provided for convenience, but it may be
inc<span style="opacity: 0.2">omp</span>lete or b<sub>r</sub>oke<sub>n</sub> in various obvious or non-obvious
ways. Refer to <a href="https://software.intel.com/en-us/download/intel-64-and-ia-32-architectures-sdm-combined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4">Intel® 64 and IA-32 Architectures Software Developers Manual</a> for anything serious.
</p></footer></body></html>