在字符串数组中加载字符串的有效地址?

Load effective address of a string in an array of strings?

有没有办法在指针数组上使用 lea

例如,我们有一个字符串数组,是否可以用 lea 做一行而不用 + 标记的两行?

.data
ARR DWORD STR1, STR2 ...
STR1 byte "asdad", 0
...
.code
;;;lea edx, [ARR+4*eax]
mov edx, offset ARR   ;+
mov edx, [edx+4*eax]  ;+
call writestring

注释掉的 lea 不起作用,我尝试的其他所有方法甚至都没有通过汇编。

您实际上并不想使用 LEA,因为它会计算一个地址,您希望该地址中包含数据。

如果您使用了 LEA,那么您将获得数组中位置的地址。您不能在编写字符串时使用它。例如,与 C 相比,这将是 char** 而你想要 char*.

如果你想写你必须完全按照你正在做的字符串。您实际上是在读取数组中包含的指针。

所以简而言之,LEA 不是您想要的,您想要的是您已经在使用的 MOV。您可以将其缩短为 MOV:

mov edx, ARR[4*eax]

或 nasm

mov edx, [4*eax + ARR]