关于[base + index * scale + disp]的几个问题

时间:2015-01-14 05:08:02

标签: assembly x86

英特尔和AT& T语法中内存寻址的一般形式如下:

[base + index*scale + disp]
disp(base, index, scale)

我的问题如下:

  • baseindex可以是任何注册吗?
  • scale可以采用哪些值,是1,2,4和8(默认值为1)?
  • indexdisp是否可以互换(唯一的区别是index是注册,而disp是常量)?

1 个答案:

答案 0 :(得分:4)

英特尔手册中描述了这一点:

  

3.7.5指定抵消
  存储器地址的偏移部分可以直接指定为静态值(称为位移)或通过   地址计算由以下一个或多个组件组成:

     
      
  • 置换 - 8位,16位或32位值。
  •   
  • 基础 - 通用寄存器中的值。
  •   
  • 索引 - 通用寄存器中的值。
  •   
  • 比例因子 - 值为2,4或8,乘以指数值。
  •   
     

添加这些组件所产生的偏移称为有效地址。