forked from NRZCode/ia32-64
136 lines
5.8 KiB
HTML
136 lines
5.8 KiB
HTML
|
<!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>FLDCW
|
|||
|
— Load x87 FPU Control Word</title></head><body><header><nav><ul><li><a href='index.html'>Index</a></li><li>December 2023</li></ul></nav></header><h1>FLDCW
|
|||
|
— Load x87 FPU Control Word</h1>
|
|||
|
|
|||
|
<table>
|
|||
|
<tr>
|
|||
|
<th>Opcode </th>
|
|||
|
<th></th>
|
|||
|
<th>Mode</th>
|
|||
|
<th>Leg Mode</th>
|
|||
|
<th>Description</th></tr>
|
|||
|
<tr>
|
|||
|
<td>D9 /5 </td>
|
|||
|
<td></td>
|
|||
|
<td></td>
|
|||
|
<td></td>
|
|||
|
<td>Load FPU control word from m2byte.</td></tr></table>
|
|||
|
<h2 id="description">Description<a class="anchor" href="#description">
|
|||
|
¶
|
|||
|
</a></h2>
|
|||
|
<p>Loads the 16-bit source operand into the FPU control word. The source operand is a memory location. This instruction is typically used to establish or change the FPU’s mode of operation.</p>
|
|||
|
<p>If one or more exception flags are set in the FPU status word prior to loading a new FPU control word and the new control word unmasks one or more of those exceptions, a floating-point exception will be generated upon execution of the next floating-point instruction (except for the no-wait floating-point instructions, see the section titled “Software Exception Handling” in Chapter 8 of the Intel<sup>®</sup> 64 and IA-32 Architectures Software Developer’s Manual, Volume 1). To avoid raising exceptions when changing FPU operating modes, clear any pending exceptions (using the FCLEX or FNCLEX instruction) before loading the new control word.</p>
|
|||
|
<p>This instruction’s operation is the same in non-64-bit modes and 64-bit mode.</p>
|
|||
|
<h2 id="operation">Operation<a class="anchor" href="#operation">
|
|||
|
¶
|
|||
|
</a></h2>
|
|||
|
<pre>FPUControlWord := SRC;
|
|||
|
</pre>
|
|||
|
<h2 id="fpu-flags-affected">FPU Flags Affected<a class="anchor" href="#fpu-flags-affected">
|
|||
|
¶
|
|||
|
</a></h2>
|
|||
|
<table>
|
|||
|
<tr>
|
|||
|
<td>C0, C1, C2, C3</td>
|
|||
|
<td>undefined.</td></tr></table>
|
|||
|
<h2 class="exceptions" id="floating-point-exceptions">Floating-Point Exceptions<a class="anchor" href="#floating-point-exceptions">
|
|||
|
¶
|
|||
|
</a></h2>
|
|||
|
<p>None; however, this operation might unmask a pending exception in the FPU status word. That exception is then generated upon execution of the next “waiting” floating-point instruction.</p>
|
|||
|
<h2 class="exceptions" id="protected-mode-exceptions">Protected Mode Exceptions<a class="anchor" href="#protected-mode-exceptions">
|
|||
|
¶
|
|||
|
</a></h2>
|
|||
|
<table>
|
|||
|
<tr>
|
|||
|
<td rowspan="2">#GP(0)</td>
|
|||
|
<td>If a memory 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 is used to access memory and it contains a NULL segment selector.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#SS(0)</td>
|
|||
|
<td>If a memory operand effective address is outside the SS segment limit.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#NM</td>
|
|||
|
<td>CR0.EM[bit 2] or CR0.TS[bit 3] = 1.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#PF(fault-code)</td>
|
|||
|
<td>If a page fault occurs.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#AC(0)</td>
|
|||
|
<td>If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#UD</td>
|
|||
|
<td>If the LOCK prefix is used.</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>#GP</td>
|
|||
|
<td>If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#SS</td>
|
|||
|
<td>If a memory operand effective address is outside the SS segment limit.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#NM</td>
|
|||
|
<td>CR0.EM[bit 2] or CR0.TS[bit 3] = 1.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#UD</td>
|
|||
|
<td>If the LOCK prefix is used.</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>#GP(0)</td>
|
|||
|
<td>If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#SS(0)</td>
|
|||
|
<td>If a memory operand effective address is outside the SS segment limit.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#NM</td>
|
|||
|
<td>CR0.EM[bit 2] or CR0.TS[bit 3] = 1.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#PF(fault-code)</td>
|
|||
|
<td>If a page fault occurs.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#AC(0)</td>
|
|||
|
<td>If alignment checking is enabled and an unaligned memory reference is made.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#UD</td>
|
|||
|
<td>If the LOCK prefix is used.</td></tr></table>
|
|||
|
<h2 class="exceptions" id="compatibility-mode-exceptions">Compatibility Mode Exceptions<a class="anchor" href="#compatibility-mode-exceptions">
|
|||
|
¶
|
|||
|
</a></h2>
|
|||
|
<p>Same exceptions as in protected mode.</p>
|
|||
|
<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>#SS(0)</td>
|
|||
|
<td>If a memory address referencing the SS segment is in a non-canonical form.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#GP(0)</td>
|
|||
|
<td>If the memory address is in a non-canonical form.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#NM</td>
|
|||
|
<td>CR0.EM[bit 2] or CR0.TS[bit 3] = 1.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#MF</td>
|
|||
|
<td>If there is a pending x87 FPU exception.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#PF(fault-code)</td>
|
|||
|
<td>If a page fault occurs.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#AC(0)</td>
|
|||
|
<td>If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3.</td></tr>
|
|||
|
<tr>
|
|||
|
<td>#UD</td>
|
|||
|
<td>If the LOCK prefix is used.</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 Developer’s Manual</a> for anything serious.
|
|||
|
</p></footer></body></html>
|