我正在处理一些有关汇编的项目,并且遇到了以下命令:
lea (%rsi,%rsi,4),%rax
lea (%r9,%rax,2),%rsi
lea (%r8,%rdx,4),%rax
movzwl 0x402ac0(%rax,%rax,1),%eax
movslq 0x402740(,%rsi,4),%rdx
movzwl和movslq在这里是什么意思?我知道他们将位从源移动到目的地,但是在此之前,他们还进行了一些计算,而且我不了解他们如何计算然后将这些位移到结果中。
有人可以帮我吗?谢谢!
movzwl从源中读取一个字(16位),将其零扩展到一起(32位),然后将其写入目标寄存器。
movslq从源中读取一个长整数(32位),将其符号扩展为qword(64位,将第31位复制到第63:32位,然后将其写入目标寄存器。
寻址模式0x402ac0(%rax,%rax,1)计算rax + rax + 0x402ac0并将其用作操作数的地址。
寻址模式0x402740(,%rsi,4)计算rsi * 4 + 0x402740并将其用作操作数的地址。