lai*_*sky 2 x86 x86-64 instruction-set
Intel 文档中的 clflush 描述说“刷新包含 m8 的缓存行。”。此外,在 Intel 文档中,m8 表示“内存中的一个字节”。
我很困惑为什么它只是m8,它只有一个字节。因为对于32位或64位系统,我们应该有32位或64位地址,即4或8字节。我一定是误会了什么。谁能帮我?
非常感谢!
如果它需要更宽的操作数,那么它可以跨越两个缓存线。
如果它可以选择刷新两个缓存行,则微编码实现会更加复杂,因此他们选择仅影响给定地址,而不影响地址范围。
clflush始终只刷新一个缓存行:包含您使用的有效地址引用的字节的缓存行。 m8这是描述这一点的最简单的方法。
如果它仍然只刷新一个缓存行,那将是愚蠢的,并且将其称为 m64 操作数是没有意义的。他们本可以让它需要 8B 对齐的地址,但对于硬件来说,屏蔽掉地址的低 n 位来找出哪个缓存行是微不足道的。