FIST, FISTP
存储整数
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
DF /2 | FIST m16int | 有效 | 有效 | 在m16int中存储ST(0). | |
DB /2 | FIST m32int | 有效 | 有效 | 在m32int中存储ST(0). | |
DF /3 | FISTP m16int | 有效 | 有效 | 在m16int和pop寄存器堆栈中存储ST(0). | |
DB /3 | FISTP m32int | 有效 | 有效 | 在m32int和pop寄存器堆栈中存储ST(0). | |
DF /7 | FISTP m64int | 有效 | 有效 | 在m64int和pop寄存器堆栈中存储 ST( 0). |
实测开销
正在从 arch-data 加载实测数据...
说明
FIST指令将ST(0)寄存器中的值转换为签名整数,并存储结果为目标操作数. 值可以用单词或双词整数格式存储. 目标操作数指定了要存储目的地值的第一个字节的地址.
FISTP指令执行与FIST指令相同的操作,然后弹出寄存器堆栈. 要弹出寄存器堆栈,处理器将ST(0)寄存器标记为空,并将 栈指针 (TOP) 递增为 1 。 FISTP指令也以四字整数格式存储值.
下表显示以整数格式存储各类数字时获得的结果.
FIST/FISTP 结果
| - | 或 DEST 格式的值太大 | * |
|---|---|---|
| F -1 | -I | |
| -1 < F < -0 | ** | |
| -0 | 0 | |
| +0 | 0 | |
| +0<F<+1 | ** | |
| F+1 | +I | |
| + | 或 DEST 格式的值太大 | * |
| 纳恩 | * |
行动
DEST := Integer(ST(0));
IF Instruction = FISTP
THEN
PopRegisterStack;
FI;
FPU Flags Affected
C1 Set to 0 if stack underflow occurred.
Indicates rounding direction of if the inexact exception (#P) is generated: 0 := not roundup; 1
:= roundup.
Set to 0 otherwise.
C0, C2, C3 Undefined.浮点 例外
#IS Stack underflow occurred.#IA Converted value is too large for the destination format.源操作数是一种SNaN,QNaN,+/-,或不支持的格式.
#P Value cannot be represented exactly in destination format.异常
保护模式
#GP(0) | 如果目的地位于不可写入的区段中。如果内存操作数的有效地址位于CS、DS、ES、FS或GS区段限制之外,则使用DS、ES、FS或GS寄存器访问内存,并含有NULL 段选择子。 |
#SS(0) | 如果 内存操作数 的有效地址在 SS 段限制之外。 |
#NM | CR0.EM[bit 2]或CR0.TS[bit 3] = 1. #PF(fault-code) 如果发生页面错误. |
#AC(0) | 如果启用了对齐检查,并且在当前特权级别为3时会给出不对齐的内存引用. |
#UD | 如果使用 LOCK 前缀 。 |
实地址模式
#GP | 如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外. |
#SS | 如果 内存操作数 的有效地址在 SS 段限制之外。 |
#NM | CR0.EM[bit 2] 或 CR0.TS[bit 3] = 1. |
#UD | 如果使用 LOCK 前缀 。 |
虚拟 8086 模式
#GP(0) | 如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外. |
#SS(0) | 如果 内存操作数 的有效地址在 SS 段限制之外。 |
#NM | CR0.EM[bit 2]或CR0.TS[bit 3] = 1. #PF(fault-code) 如果发生页面错误. |
#AC(0) | 如果启用对齐检查, 并使用不对齐的内存引用 。 |
#UD | 如果使用 LOCK 前缀 。 |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
#SS(0) | 如果引用SS部分的内存地址是非冠状的. |
#GP(0) | 如果内存地址是非冠状的. |
#NM | CR0.EM[bit 2] 或 CR0.TS[bit 3] = 1. |
#MF | 如果存在待决的x87 FPU例外. #PF(fault-code) 如果发生 页面错误. |
#AC(0) | 如果启用了对齐检查,并且在当前特权级别为3时会给出不对齐的内存引用. |
#UD | 如果使用 LOCK 前缀 。 |