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

时间:2016-06-10 15:39:21

标签: assembly syntax x86 irvine32

有没有办法在指针数组上使用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不起作用,我尝试的其他所有内容都无法通过汇编。

1 个答案:

答案 0 :(得分:4)

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

如果您使用了LEA,它会为您提供阵列中的位置地址。你不能在写字符串时使用它。例如,与C相比,这可能是char**,而您需要char*

如果你想编写你必须完成的字符串,就像你正在做的那样。你实际上正在读取数组中包含的指针。

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

mov edx, ARR[4*eax]

或使用nasm

mov edx, [4*eax + ARR]