英特尔和AT& T语法中内存寻址的一般形式如下:
[base + index*scale + disp]
disp(base, index, scale)
我的问题如下:
base
和index
可以是任何注册吗?scale
可以采用哪些值,是1,2,4和8(默认值为1)?index
和disp
是否可以互换(唯一的区别是index
是注册,而disp
是常量)?答案 0 :(得分:4)
英特尔手册中描述了这一点:
3.7.5指定抵消
存储器地址的偏移部分可以直接指定为静态值(称为位移)或通过 地址计算由以下一个或多个组件组成:
- 置换 - 8位,16位或32位值。
- 基础 - 通用寄存器中的值。
- 索引 - 通用寄存器中的值。
- 比例因子 - 值为2,4或8,乘以指数值。
添加这些组件所产生的偏移称为有效地址。