operand-size和address-size属性

本文详细介绍了处理器在不同模式下(保护模式、实地址模式、虚拟-8086模式、SMM) operand-size 和 address-size 的默认设定及如何通过指令前缀进行覆盖。在64位模式下,地址大小默认为64位,操作数大小默认为32位,可通过特定前缀改变。REX.W前缀用于在64位模式下切换到64位操作数大小,而66H前缀则用于在某些情况下切换操作数大小。
摘要由CSDN通过智能技术生成

operand-size和address-size属性

当处理器工作在 保护模式(the protected mode)时,每个代码段(code segment )都会有一个默认的 operand-size 属性和 address-size 属性。这两个属性值由 代码段描述符D标志位 指定。

  • D标志位 被设置为 1,则表示 operand-sizeaddress-size 都是 32-bit
  • D标志位 被设置为 0,则表示 operand-sizeaddress-size 都是 16-bit

当处理器工作在 实地址模式 (real-address mode)、虚拟-8086模式 (virtual-8086) 或 SMM时。operand-sizeaddress-size 总是默认为16-bit

operand-size 指定操作数的大小。当 16-bit operand-size 属性生效时,这个操作数大小通常是 8 bits16 bits。当 32-bit operand-size 属性生效时,这个操作数大小通常是 8 bits32 bits

address-size 属性在寻址内存时指定地址的大小:16 bits32 bits。当 16-bit address-size 属性生效时,segment offsets and displacements 是 16 bits,这限制一个段最大为64KB。当 32-bit address-size 属性生效时,segment offsets and displacements 是 32 bits,则允许最大寻址4GB内存空间。

可以通过在指令中添加 operand-size prefix 和/或 address-size prefix 覆盖默认的 operand-size 和/或 address-size 属性值。这个前缀的作用仅限于被它修饰的指令。

表3-3 展示了处理器工作在保护模式兼容模式时,D标志位operand-size prefixeaddress-size prefixe 对有效的操作数大小和地址大小的影响。
在这里插入图片描述

64位模式下的操作数大小和地址大小

64位模式下,
缺省地址 大小是 64 bits
缺省操作数 大小是 32 bits

可以使用指令前缀覆盖缺省值,在指令中加上 address-size prefix(67H)operand-size prefix(66H) 指令前缀可以达到在一条指令上混合使用32/64位数据和32/64位地址。
表3-4 展示了 66H 指令前缀和 REX.W 前缀的有效组合覆盖 operand-size 缺省值。
注意:64位模式下不支持16位地址。

REX 前缀由4个bit位构成,共可以形成16(2^4)个不同的值。REX 前缀中的 W 位称为 REX.W。 如果将 REX.W 位设置位1,则操作数大小由缺省的32位变为64位(66H 前缀如果有不起作用)。 注意,软件仍可以使用 operand-size prefix (66H) 切换到16位操作数大小。 但是,如果在指令中同时使用 REX.W,则优先于 operand-size prefix (66H)

对于SSE/SSE2/SSE3/SSSE3 SIMD指令:操作码扩展必须使用 66HF2HF3H 前缀。 在这种情况下,有效的 REX.W 前缀和 66H 操作码扩展前缀之间将不存在任何交互。
在这里插入图片描述
— 翻译自intel官方手册

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值