ModR/M 历史记数法 /0.../7

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

在学习 x64 时,我很难理解 intel 手册中的一些符号。

我们来看看

0xC7
MOV
enter image description here

关于

/0
..
/7
它说:

历史上该文档仅指定了 ModR/M.reg 字段 使用符号 /0 ... /7 进行限制并且未指定 编码中 ModR/M.mod 和 ModR/M.r/m 字段的限制 盒子。

我的问题是:

  • /0
    后面的数字是限制代码,但是哪个限制呢?解释指令时是什么意思?
  • 如果我正在读取像
    c7c701020304...
    这样的字节,如何知道我是否需要准备imm16(
    0102
    或imm32(
    01020304
    )?通过测试,我知道在这个
    imm32
    中,但我不明白为什么。我推断它与 rex+modrm 有关。
{ xxd --ps -r | ndisasm -b64 -; } <<<c7c701020304 
00000000  C7C701020304      mov edi,0x4030201
  • 换句话说:为什么
    ndisasm
    将其解析为
    imm32
    而不是
    imm16
x86-64 instruction-set
1个回答
0
投票

/digit
仍然只限制ModRM.reg字段。

该注释是关于新的 Intel AMX 指令,其中一些指令具有不同的 ModRM 规范。例如 TDPBSSD/TDPBSUD/TDPBUSD/TDPBUU 需要 mod=11

TDPBSSD/TDPBSUD/TDPBUSD/TDPBUU encoding table

并且 TILELOADD/TILELOADDT1 需要 mod!=11 和 rm=100

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.