内存寻址的一般形式(找到它here)是:
[base + index*scale + disp]
所以正确的指令就是:
mov eax, [ebx + ecx*4 + 2]
这条指令应该是不正确的(但NASM发现它是正确的!):
mov eax, [ebx + ecx + 123 + 5 - 2]
那么为什么这条指令是正确的(即使它不符合内存寻址的一般形式)?
我认为这是正确的,因为:
123 + 5 - 2
都被视为代表126
的一个数字(disp
)。ecx
有效:ecx*1
)。mov eax, [ebx + ecx*1 + 126]
。我说错了吗?