IDM表示,如果EBP用作基址寄存器,则内存操作使用SS段.其结果是,[ebp + esi]
和[esi + ebp]
引用SS和DS的段,分别.参见NASM的文档:3.3有效地址.
另外,在上述相同的部分,NASM提到如何通过替换以产生更短的机器代码[eax*2]
与[eax+eax]
.
然而,NASM还生成[ebp + ebp]
用于[ebp*2]
(即没有碱寄存器).
我怀疑[ebp+ebp]
引用SS段,并[ebp*2]
引用DS段.
我问NASM这个问题.他们思考[ebp*2]
并且[ebp+ebp]
是一样的,但对我来说没有意义.显然,[ebp+ebp]
(ebp作为基址寄存器)引用SS段.如果它们相同,也[ebp*2
必须参考SS.这意味着SS只要ebp
是基数或索引寄存器就被引用,这又意味着SS [ebp + esi]
和[esi + ebp]
引用SS段,因此它们必须相同.
有谁知道哪个部分[ebp*2]
使用?