x86 MASKMOVDQU指令的所有16个字节必须是有效内存吗?

当使用x86 MASKMOVDQU指令时,即使某些掩码位为零,目标上也总是需要16字节的可写内存?

例如,让我们说,我写的解决0x12345FFC使用MASKMOVDQU0x12345000处的页面是有效内存,但0x12346000处的页面不是。 如果屏蔽寄存器是0x00000000'00000000'00000000'FFFFFFFF ,这个MASKMOVDQU将始终工作,否则可能会发生异常?

英特尔手册中提到了以下关于全零掩码的内容,但并未提及我正在谈论的边缘案例:

所有0掩码的行为如下所示:

•没有数据将被写入内存。

•不保证断点信号(代码或数据); 不同的处理器实现可能表示或不表示这些断点。

•与寻址内存和页面错误相关的异常仍可能发出信号(取决于实现)。

•如果目标内存区域映射为UC或WP,则不保证这些内存类型的相关语义的执行(即保留),并且是特定于实现的。


见第三个要点。 具体说,即使所有掩码都为零,异常仍可能发生。 当然,这意味着可能会为掩码写入生成异常。

事实上,AMD手册在这个问题上更加明确:

未选择存储到内存的元素的异常和陷阱行为取决于实现。 例如,一个给定的实现可能表示一个数据断点或一个页面错误,用于零掩码字符而不是实际写入的字节。

链接地址: http://www.djcxy.com/p/72403.html

上一篇: Must all 16 bytes of an x86 MASKMOVDQU instruction be valid memory?

下一篇: Assembly: ROL instruction correct?