在字符串数组中加载字符串的有效地址?
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]
有没有办法在指针数组上使用 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]