2015-12-16 11 views
5

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.

  1. EBP + var_2C8 viene convertito a stare a galla e si trasferisce a xmm0 registrare
  2. EBP + var_2C8 viene spostato EDX e spostamento a destra di 31 bit
  3. 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 ...

+2

È 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

risposta

9

Questa è la conversione di intero senza segno a raddoppiare.

Come funziona è lo converte prima come firmato, il che significa che il bit di segno ha un peso di -2 , ma dovrebbe essere unsigned dove il bit superiore ha un peso di 2 . Quindi, se il segno è impostato, aggiunge +2 = 4294967296,0 (41f0000000000000 come doppia) per compensare. Lo fa spostando a destra, ponendo il bit superiore nel bit inferiore e di compensazione tutto il resto, e quindi si utilizza come un indice di tabella in una tabella contenente 0 e 4294967296,0.

+0

Non posso ringraziarti abbastanza per questa spiegazione approfondita! – leo

Problemi correlati