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中有几种不同形式的间接操作数:
"位移"只是一个常量,可以添加到地址的其余部分.如果除了常量之外没有地址的组成部分,它仍称为"位移".这主要是为了与其他寻址形式保持一致.
另一种看待它的方式是所有地址都是这种形式
[reg*constant + reg + displacement]
每个组件允许值为0.
[displacement]形式只是编码,其中除了位移之外的所有组件都是零.
作为编译器编写者,最后两种形式特别有趣.它们可以轻松地对pArray[index]->field + 1单个指令中的内容进行编码.