【问题标题】:Rex prefix decoding for intel x64 arch英特尔 x64 架构的 Rex 前缀解码
【发布时间】:2012-08-15 14:05:22
【问题描述】:

在英特尔文档"Architectures Software Developer’s Manual Vol 2A" 中,表 2-4 显示了 REX 前缀位的重要性。

有人可以向我解释当 W=0 时如何解释吗?它说0 = Operand size determined by CS.D,但我不明白CS.D 是什么意思。

【问题讨论】:

  • 参见第 3A 卷,段描述符。在这种情况下,它表示当前代码段的“默认操作大小”,可以是 16、32 或 64 位。
  • @DCoder 为什么不这样回答?

标签: assembly x86-64 intel opcode machine-code


【解决方案1】:

CS.D 代表与当前代码段关联的段描述符 的“默认操作大小”字段。这控制了地址和操作数的默认大小,并且可以设置为默认为 16 或 32 位操作数大小。

在 64 位又名长模式 (CS.L=1) 中,CS.D 的唯一有效设置 = 32 位,因此清除 W 位的 REX 前缀将默认操作数大小保留为 32 -bit.(操作数大小前缀可以覆盖操作数大小到 16)。

长模式下的默认地址大小为 64 位(指令上的地址大小前缀会将其覆盖为 32)。


段描述符在第 3A 卷 - 系统编程指南,第 1 部分3.4.5 段描述符一章中有详细描述。

D 字段的影响也在第 1 卷 - 基本架构,第 3.6 章 操作数大小和地址大小属性中进行了讨论em>。

【讨论】:

  • 谢谢。竖起大拇指。不知道 CS 包含默认地址和操作数大小。将 CS.D 设置为 32 位或 16 位大小有什么意义?
  • @mathk:你不能,除了 16 位保护模式。 (不是 16 位实模式;16 位 protected 模式。是的,没有人使用它。)但这与现有的 REX 前缀不兼容:0x40..4f 仅解码为 REX 前缀在 64 位长模式下,设置了 CS.L 和 CS.D。设置CS.L但清除CS.D无效;该组合已保留。
  • @Peter,在长模式下 D 必须为 0。
  • @prl:废话,我以为 D=1 意味着 32 位。在我对答案的编辑中,我只是说 CS.D = 32-bit,它试图回避如何编码的问题。设置/不设置 CS.L 是否意味着同样的事情? (我没有打开 PDF,我不记得了。)
  • L=0, D=0 为 16 位; L=0,D=1为32位; L=1,D=0为64位; L=1,D=1 保留(128 位?)。 @彼得
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多