2

我读完了 PC 汇编语言,我正在研究在汇编中实现 RC4 加密。我无法理解的是为什么

mov eax, [edx+ecx]

有效,但

mov eax, [edx-ecx]

没有。内联汇编器给了我这个错误信息,

“第二个操作数”中的非常量表达式

这意味着什么?提前致谢。

4

3 回答 3

7

有一个操作码:

mov eax, [edx+ecx]

并且有一个可以从以下位置组装的操作码:

mov eax, [edx-CONSTANT]

因为汇编器使用常规操作码但在汇编期间否定常量:

mov eax, [edx+(-CONSTANT)]

但是,没有以下操作码:

mov eax, [edx-ecx]

所以基本上你正在尝试执行一条不存在的指令。

于 2011-04-01T15:01:05.660 回答
5

下面对 x86 寻址模式进行了很好的总结。请注意,没有“注册减注册”形式:维基百科

作为一种解决方法,您可以否定ecxthen use的内容[edx+ecx](如果您之后需要原始值,则可能必须将其否定)。

于 2011-04-01T15:18:44.020 回答
1

你不能像那样减去偏移量。目的是您可以指向内存缓冲区的底部,然后向其中添加偏移量。减法会导致您退出指定的内存缓冲区......

于 2011-04-01T13:35:10.283 回答