有没有办法在指针数组上使用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
不起作用,我尝试的其他所有内容都无法通过汇编。
答案 0 :(得分:4)
您实际上并不想使用LEA
,因为它会计算您希望数据包含在该地址中的地址。
如果您使用了LEA
,它会为您提供阵列中的位置地址。你不能在写字符串时使用它。例如,与C相比,这可能是char**
,而您需要char*
。
如果你想编写你必须完成的字符串,就像你正在做的那样。你实际上正在读取数组中包含的指针。
简而言之,LEA
不是你想要的,你想要你已经使用的MOV
。您可以将其缩短为MOV
:
mov edx, ARR[4*eax]
或使用nasm
mov edx, [4*eax + ARR]