编码 x64 VEX 前缀
Encoding the x64 VEX prefix
我正在使用 VEX 前缀指南:http://wiki.osdev.org/X86-64_Instruction_Encoding#REX_prefix
虽然我不知道如何编码实际的 VEX 指令。 ADDPD 指令(Intel x64 第 459 页)操作码如下所示:VEX.NDS.128.66.0F.WIG 58 /r
嗯什么?? VEX 指南没有提到任何关于 'NDS' 或 'WIG' 的内容。我错过了什么?
您缺少第 3.1.1.2 节 "Opcode Column in the Instruction Summary Table (Instructions with VEX prefix)"(我电脑上的手册第 64 页,其他版本可能略有不同)
对于这个实例,重要的部分是:
VEX
(显然)意味着有一个 VEX 前缀。
NDS
,VEX.vvvv字段指定了一个寄存器(不总是,有时不用,必须设置为全1),并且是只读的第一个源操作数。
128
很明显,是128bit宽的版本
55
,它没有这么说,它说 66
或至少应该这样说。其他选择是 F2、F3 和 "nothing"。指示 VEX.pp 字段的值应该是什么,对应于旧编码中的强制前缀。
0F
,opcode map specifier,对应旧编码中的0F前缀(也有0F3A和0F38)
WIG
(其他选项有W1
和W0
),表示忽略VEX.W字段(W0
和W1
的意思W
位必须分别为 0 或 1)
我正在使用 VEX 前缀指南:http://wiki.osdev.org/X86-64_Instruction_Encoding#REX_prefix
虽然我不知道如何编码实际的 VEX 指令。 ADDPD 指令(Intel x64 第 459 页)操作码如下所示:VEX.NDS.128.66.0F.WIG 58 /r
嗯什么?? VEX 指南没有提到任何关于 'NDS' 或 'WIG' 的内容。我错过了什么?
您缺少第 3.1.1.2 节 "Opcode Column in the Instruction Summary Table (Instructions with VEX prefix)"(我电脑上的手册第 64 页,其他版本可能略有不同)
对于这个实例,重要的部分是:
VEX
(显然)意味着有一个 VEX 前缀。NDS
,VEX.vvvv字段指定了一个寄存器(不总是,有时不用,必须设置为全1),并且是只读的第一个源操作数。128
很明显,是128bit宽的版本55
,它没有这么说,它说66
或至少应该这样说。其他选择是 F2、F3 和 "nothing"。指示 VEX.pp 字段的值应该是什么,对应于旧编码中的强制前缀。0F
,opcode map specifier,对应旧编码中的0F前缀(也有0F3A和0F38)WIG
(其他选项有W1
和W0
),表示忽略VEX.W字段(W0
和W1
的意思W
位必须分别为 0 或 1)