intel手册中r/m8中r为r8 GPR,reg/m8中reg为r16/r32/r64 GPR?

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

在卷。 2A 3-5,英特尔综合手册 PDF,订单号:325462-080US,2023 年 6 月。

3.1.1.3 操作码汇总表中的指令栏

此部分的标题项为 r/m8r/m16r/m32r/m64。例如,

r/m8 - 字节操作数,可以是字节通用寄存器(AL、CL、DL、BL、AH、CH、DH、BH、BPL、SPL、DIL 和 SIL)的内容,也可以是来自记忆。字节寄存器 R8B - R15B 可在 64 位模式下使用 REX.R。

r/m16 — 字通用寄存器或内存操作数,用于操作数大小属性为 16 位的指令。字通用寄存器有:AX、CX、DX、BX、SP、BP、SI、DI。存储器的内容可在有效地址计算提供的地址处找到。字寄存器 R8W - R15W 可在 64 位模式下使用 REX.R。

r/m32 — 双字通用寄存器或内存操作数,用于操作数大小属性为 32 位的指令。双字通用寄存器有:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI。存储器的内容可在有效地址计算提供的地址处找到。在 64 位模式下使用 REX.R 时,双字寄存器 R8D - R15D 可用。

r/m64 — 使用 REX.W 时,用于操作数大小属性为 64 位的指令的四字通用寄存器或内存操作数。四字通用寄存器有:RAX、RBX、RCX、RDX、RDI、RSI、RBP、RSP、R8–R15;这些仅在 64 位模式下可用。内存的内容是在有效地址计算提供的地址处找到的。

虽然有 r/m8r/m16r/m32r/m64,但本节中没有 reg/m8reg/m16

但是有一个reg标题项,如下:

reg - 当寄存器的宽度与指令操作的语义无关时,用于指令的通用寄存器。寄存器可以是 r16、r32 或 r64。

因此我认为在 reg/m8reg/m16 中,reg 代表 r16/r32/r64 GPR,并且在任何具有这些操作数的指令中,寄存器的宽度与语义无关指令的操作。

因此,我认为如下:

  • 在r/m8的情况下,r代表8位GPR。

  • 在r/m16的情况下,r代表16位GPR。

  • 对于r/m32,r代表32位GPR。

  • 对于r/m64,r代表64位GPR。

  • 对于 reg/m8,reg 代表 r16/r32/r64 GPR。

  • 对于 reg/m16,reg 代表 r16/r32/r64 GPR。

这是正确的解释吗?

顺便说一句,我认为所有具有 reg/m8 或 reg/m16 操作数的指令都是

PEXTRB reg/m8, xmm2, imm8 ; 66 0F 3A 14 /r ib
PEXTRW reg/m16, xmm, imm8 ; 66 0F 3A 15 /r ib
VMOVW xmm1, reg/m16 ; EVEX.128.66.MAP5.WIG 6E  /r
VMOVW reg/m16, xmm1 ; EVEX.128.66.MAP5.WIG 7E  /r
VPEXTRB reg/m8, xmm2, imm8 ; VEX.128.66.0F3A.W0 14 /r ib
VPEXTRB reg/m8, xmm2, imm8 ; EVEX.128.66.0F3A.WIG 14 /r ib
VPEXTRW reg/m16, xmm2, imm8 ; VEX.128.66.0F3A.W0 15 /r ib
VPEXTRW reg/m16, xmm2, imm8 ; EVEX.128.66.0F3A.WIG 15 /r ib

.

assembly x86 x86-64 cpu intel
© www.soinside.com 2019 - 2024. All rights reserved.