x86/x64添加位移寻址

Rya*_*own 8 64-bit x86 assembly

我正在为x86/x64 CPU指令编写一个编译器,我似乎无法弄清楚'displa'地址的含义.例如,Add指令详述如下:http: //www.c-jump.com/CIS77/CPU/x86/X77_0150_encoding_add_edx_displacement.htm

我只是尝试实现add指令,其中寄存器被添加到正常的内存地址.问题是,地址是"位移地址".这是否意味着地址是一个有符号的值,它是指令位置的偏移量?

Sco*_*ski 12

x86中有几种不同形式的间接操作数:

  1. [条]
  2. [reg + displacement]
  3. [移位]
  4. [reg*constant + reg]
  5. [reg*constant + reg + displacement]

"位移"只是一个常量,可以添加到地址的其余部分.如果除了常量之外没有地址的组成部分,它仍称为"位移​​".这主要是为了与其他寻址形式保持一致.

另一种看待它的方式是所有地址都是这种形式

[reg*constant + reg + displacement]

每个组件允许值为0.

[displacement]形式只是编码,其中除了位移之外的所有组件都是零.

作为编译器编写者,最后两种形式特别有趣.它们可以轻松地对pArray[index]->field + 1单个指令中的内容进行编码.