2.1.1指令前缀
F3H 也可用作POPCNT,LZCNT和ADOX指令的必填前缀。
但是在
2.1.2操作码
例如,CVTDQ2PD由以下序列组成: F3 0F E6。第一个字节是强制性前缀(不被视为重复前缀)。
我可以说,如果英特尔手册中的操作码的第一个字节是F3H,那么它是该指令的必需前缀吗?
答案 0 :(得分:4)
是
在序列0F E6
中,第一个字节0F
是一个双字节操作码转义。
另一个字节E6
根据附录A(第A.3节)中的表进行翻译,并在此处以简短形式报告
上一行是字节的低半字节,第一列是较高的一半。
我们可以看到,如果没有F3
字节,序列0F E6
就不会对任何指令进行编码。
66 0F E6
对vcvttpd2dq
进行编码
F3 0F E6
对vcvtdq2pd
进行编码
F2 0F E6
对vcvtpd2dq
是的,F3
是强制性的。
不可否认,英特尔所做的是一个怪癖,字节F3
是一个真正的rep
前缀,但CPU并没有这样解释。
您可以将0F E6
视为未命名的说明,例如unm2
,这样:
unm2
表现为ud2
rep unm2
表现为vcvtdq2pd
repne unm2
表现为vcvtpd2dq
unm2
表现为vcvttpd2dq