FXCH

交换登记册内容

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
D9 C8+iFXCH ST(i)有效有效交换ST(0)和ST(i)的内容.
D9 C9FXCH有效有效交换ST(0)和ST(1)的内容.

实测开销

正在从 arch-data 加载实测数据...

说明

交换登记册ST(0)和ST(i)的内容。 如果没有指定源操作数,则交换ST(0)和ST(1)的内容.

本指令提供了将 FPU 寄存器堆栈中的值移动到堆栈顶部 [ST( 0)] 的简单手段,这样它们就可以由那些 浮点 指令运行,这些指令只能运行在 ST( 0) 中的值上. 例如,以下指令序列从寄存器堆栈的顶端取出第三个寄存器的方根:

FXCH ST(3); FSQRT; FXCH ST(3);

此指令的操作在非64位模式和64位模式中是相同的.

行动

IF (Number-of-operands) is 1
    THEN
          temp := ST(0);
          ST(0) := SRC;
          SRC := temp;
    ELSE
          temp := ST(0);
          ST(0) := ST(1);
          ST(1) := temp;

FI;

FPU Flags Affected

C1                  Set to 0.

C0, C2, C3          Undefined.

浮点 例外

#IS                 Stack underflow occurred.

异常

保护模式
#NMCR0.EM[bit 2] 或 CR0.TS[bit 3] = 1.
#MF如果存在待决的x87 FPU例外.
#UD如果使用 LOCK 前缀 。
实地址模式
与保护模式中的例外相同.
虚拟 8086 模式
与保护模式中的例外相同.
兼容模式
与保护模式中的例外相同.
64 位模式
与保护模式中的例外相同.

来源