从手册了解Intel汇编指令语法

问题描述 投票:0回答:1

英特尔软件开发人员手册,第 2B 卷,第 4-540 页中,介绍了汇编

RDPID
指令。

Opcode/Instruction
F3 0F C7 /7
RDPID r32

Op/En
R

64/32-bit Mode
N.E./V

CPUID Feature Flag
RDPID

Description
Read IA32_TSC_AUX into r32.

Opcode/Instruction
F3 0F C7 /7
RDPID r64

Op/En
R

64/32-bit Mode
V/N.E.

CPUID Feature Flag
RDPID

Description
Read IA32_TSC_AUX into r64.

然后

Instruction Operand Encoding

Op/En
R

Operand 1
ModRM:r/m (w)

Operand 2
N/A

Operand 3
N/A

Operand 4
N/A

我不熟悉所采用的约定,并且从表格中我无法理解指令的语法。我唯一能猜测的是 32 位和 64 位模式的操作码是相同的,所以也许这两种情况下的指令是相同的。另外,该指令是只读的(也许这就是

R
中的
Op/En
)。

但是剩下的呢?我试过了

rdpid <destination_register>

而且它似乎有效。还提到了

CS.D
REX.W
,我不知道(并且在手册中搜索
REX.W
没有用,我找不到解释)。为什么操作数 1 不是目标寄存器?什么是
ModRM:r/m (w)

那么,真正的问题:该指令的正确语法是什么以及如何从手册中提供的信息中获取它?

assembly x86 x86-64 intel
1个回答
4
投票

CS.D
D
引用的段描述符中的
CS
位,指示这是 16 位还是 32/64 位代码段。
REX.W
W
前缀系列(
REX
40h
)中的
4Fh
位,指示 64 位操作数大小。

指令描述为

F3 0F C7 /7    RDPID r32  (in 16/32 bit mode)
F3 0F C7 /7    RDPID r64  (in 64 bit mode)

符号

/7
的意思是“reg 字段中带有 7 的 modr/m 字节”。符号
r32
r64
分别表示“32 位或 64 位通用寄存器”。从“指令操作数编码”表中可以得知该操作数被编码在modr/m字节的r/m字段中。因此,在 32 位模式下,您可以使用这样的指令:

F3 0F C7 CF    RDPID ECX

在 64 位模式下如下:

F3 0F C7 CF    RDPID RCX
© www.soinside.com 2019 - 2024. All rights reserved.