内存寻址一般形式混乱

时间:2017-07-02 14:53:22

标签: assembly x86 nasm

内存寻址的一般形式(找到它here)是:

[base + index*scale + disp]

所以正确的指令就是:

mov eax, [ebx + ecx*4 + 2]

这条指令应该是不正确的(但NASM发现它是正确的!):

mov eax, [ebx + ecx + 123 + 5 - 2]

那么为什么这条指令是正确的(即使它不符合内存寻址的一般形式)?

我认为这是正确的,因为:

  • 123 + 5 - 2都被视为代表126的一个数字(disp)。
  • 文档说明:“如果未指定比例,则比例为1”(因此ecx有效:ecx*1)。
  • 所以最终结果是:mov eax, [ebx + ecx*1 + 126]

我说错了吗?

0 个答案:

没有答案