2014-03-19 67 views
0

鉴于我有这个数组:FOO BYTE 1,2,3,4错误的操作数无效

而且,我想将一个数组传递给使用堆栈的过程。

我的问题是如果我想通过不是0的索引(例如我的数组中的2),我可以执行以下操作:push OFFSET foo [1] ...但这不起作用(编译错误):在eax为1时推送OFFSET foo [eax]。

是否有任何寄存器在括号中工作,所以我不必使用常量?我希望索引根据用户输入进行更改,因为那样我就不必使用一系列if/else语句。

回答

0

首先使用某种形式的加法计算地址,然后将该值放入堆栈。一个可能的解决方案:

lea edx, [foo+eax] 
push edx 
0

其语法是:

 push offset foo+2 

注意,立即加入到偏移忽略foo的数据类型(如果FOO是一个DWORD它不会有问题,加2总是加2,没有任何缩放效果)。