qualcuno può spiegare che cosa il seguente codice fa?Cosa istruzioni assembly x86 fare (addsd xmm0, ds: __ XMM @ 41f00000000000000000000000000000 [edx * 8])?
addsd xmm0, ds:[email protected][edx*8]
Ho pensato che un po 'di valore viene aggiunto a galleggiare registrati xmm0, ma qual è il significato di __xmm @ 41f00000000000000000000000000000 costante? C'è qualche documentazione in cui posso leggere a riguardo?
Ecco il pieno frammento di codice che sto cercando di capire:
cvtsi2sd xmm0, [ebp+var_2C8]
mov edx, [ebp+var_2C8]
shr edx, 1Fh
addsd xmm0, ds:[email protected][edx*8]
EBP + var_2C8 è valore intero senza segno.
- EBP + var_2C8 viene convertito a stare a galla e si trasferisce a xmm0 registrare
- EBP + var_2C8 viene spostato EDX e spostamento a destra di 31 bit
- qualcosa derivato da questo spostamento viene aggiunto xmm0.
Che cosa esattamente viene aggiunto al xmm0? Esiste un possibile scopo per questo calcolo?
Aggiornamento .
Ecco il disassemblaggio prima per questo codice:
cvtsi2sd xmm0,dword ptr [ebp-2C8h]
mov edx,dword ptr [ebp-2C8h]
shr edx,1Fh
addsd xmm0,mmword ptr [edx*8+2685CC0h]
sembra una doppia valore da array di costanti viene aggiunto al xmm0 ...
È una tabella di ricerca o matrice. La costante sciocca è solo un prodotto del tuo disassemblatore (potrebbe anche essere un simbolo), guarda lo smontaggio crudo per vedere l'indirizzo reale. – Jester