gpt4 book ai didi

assembly - MMX 指令和 x87 FPU 标记字

转载 作者:行者123 更新时间:2023-12-01 11:20:15 28 4
gpt4 key购买 nike

section .data
qVar1: dq 1


section .bss
var28: resb 28


section .text
_main:

; Use an MMX instruction

movq mm0, [qVar1] ; Move quadword from r/m64 to mm.

; Read Tag Word

fstenv [var28]
mov ax, [var28 + 8] ; move the Tag Word to ax

此时ax0101 0101 0101 0110

但是从英特尔手册,9.5.1 MMX 指令和 x87 FPU 标记字部分,我引用:

After each MMX instruction, the entire x87 FPU tag word is set to valid (00B).

那么为什么 ax 不全为零?

最佳答案

您引用的部分继续说:

Chapter 12, “Intel® MMX™ Technology System Programming,” in the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A, provides additional information about the effects of x87 FPU and MMX instructions on the x87 FPU tag word.

事实上,第三本手册的第 12.2 节阐明了:

When an MMX instruction writes a value into an MMX register, at the same time, bits 64 through 79 of the corresponding floating-point register are set to all 1s.

指令movq mm0, [qVar1] 然后将寄存器R0 设置为无效的0xffff_00000000_00000000 double extended precision从 80387 开始的浮点值(以前是正无穷大)。
这在以后很重要。

fstenv 指令 保存实际的标记词,而是解释寄存器和实际的标记词来计算将存储在内存中的标记词.
然后将所有寄存器的标记字寄存器重置为空。

fstenv对x87 FPU tag word的作用是:

Tags and register values are read and interpreted; then all tags are set to 11B.

而内存中存储的x87 FPU tag word的图像为:

Tags are set according to the actual values in the floating-point registers; that is, empty registers are marked 11B and valid registers are marked 00B (nonzero), 01B (zero), or 10B (special).

Effects of the MMX and x87 instructions on the x87 FPU tag word

如果您在任何 XMM 代码之前使用 emms,则标签都将为 11b(空)。
一旦 movq mm0, [qVar1] 被执行,所有标签都设置为 00b(有效)。
当执行 fstenv 时,寄存器被标记为非空并分析它们的内容:所有寄存器 R1-R7 看起来都是零,而 R0,如前所述,包含一个特殊值,其标记在因此存储在内存中的图像是 10b(特殊)。

第二本手册中关于fstenv 的条目无疑是骗人的,它的伪代码记为

Operation
DEST[FPUControlWord] ← FPUControlWord;
DEST[FPUStatusWord] ← FPUStatusWord;
DEST[FPUTagWord] ← FPUTagWord;
DEST[FPUDataPointer] ← FPUDataPointer;
DEST[FPUInstructionPointer] ← FPUInstructionPointer;
DEST[FPULastInstructionOpcode] ← FPULastInstructionOpcode;

这根本不是真的。

关于assembly - MMX 指令和 x87 FPU 标记字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44738755/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com