偏移的操作数无效

时间:2014-03-19 01:43:29

标签: arrays assembly x86 masm

鉴于我有这个数组:FOO BYTE 1,2,3,4

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

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

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

2 个答案:

答案 0 :(得分:0)

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

lea edx, [foo+eax]
push edx

答案 1 :(得分:0)

这个的语法是:

        push    offset foo+2

请注意,添加到偏移的立即数忽略了foo的数据类型(如果foo是DWORD则不重要,添加2总是加2,没有任何缩放效果)。