что означает movzwl 0x402ac0 (% rax,% rax, 1),% eax и movslq 0x402740 (,% rsi, 4),% rdx в сборке x86-64? - PullRequest
0 голосов
/ 19 октября 2019

Я работаю над некоторыми проектами по сборке, и я столкнулся со следующими командами:

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? Я знаю, что они перемещают биты из источника в пункт назначения, но до этого они также выполняли некоторые вычисления, и я не понимаю, как они вычисляют, а затем перемещают эти биты в результатах.

Может кто-нибудь помочь мне с этим? Спасибо!

1 Ответ

2 голосов
/ 19 октября 2019

movzwl читает слово (16 бит) из источника, обнуляет его до длинного (32 бита) и записывает его в регистр назначения.

movslq читает длинное (32 бита) иззнак источника расширяет его до qword (64 бита, реплицируя бит 31 в биты 63:32), и записывает его в регистр назначения.

Режим адресации 0x402ac0 (% rax,% rax, 1)вычисляет rax + rax + 0x402ac0 и использует его в качестве адреса операнда.

Режим адресации 0x402740 (,% rsi, 4) вычисляет rsi * 4 + 0x402740 и использует его в качестве адреса операнда.

...