Articles of x86

Binary Bomba – Fase 4

Sto attraversando un periodo molto difficile per rintracciare il codice assembly per la seguente bomba binaria (un incarico da scuola in cui una bomba deve essere disinnescata, questa bomba contiene 6 fasi che hanno tutte 1 input corretto per passare alla fase successiva). Sono attualmente su phase_4 e ha una funzione ricorsiva chiamata func4. Ho […]

Ordine di allocazione variabile locale nello stack

Dai un’occhiata a queste due funzioni: void function1() { int x; int y; int z; int *ret; } void function2() { char buffer1[4]; char buffer2[4]; char buffer3[4]; int *ret; } Se interrompo con function1() in gdb e stampo gli indirizzi delle variabili, ottengo questo: (gdb) p &x $1 = (int *) 0xbffff380 (gdb) p &y […]

Che cosa verrà utilizzato per lo scambio di dati tra thread sono in esecuzione su un core con HT?

La tecnologia Hyper-Threading è una forma di tecnologia di multithreading simultanea introdotta da Intel. Queste risorse includono il motore di esecuzione, le cache e l’interfaccia del bus di sistema; la condivisione delle risorse consente a due processori logici di lavorare tra loro in modo più efficiente e consente a un processore logico in stallo di […]

Come sono programmati gli x86, esattamente?

Le moderne CPU x86 suddividono il stream di istruzioni in entrata in micro-operazioni (uops 1 ) e schedano questi uops out-of-order man mano che i loro input diventano pronti. Sebbene l’idea di base sia chiara, mi piacerebbe conoscere i dettagli specifici di come sono programmate le istruzioni pronte, poiché influisce sulle decisioni di micro-ottimizzazione. Ad […]

Perché le istruzioni di moltiplicazione con segno e senza segno sono diverse su x86 (-64)?

Ho pensato che il punto 2 del complemento era che le operazioni potevano essere implementate allo stesso modo per i numeri firmati e non firmati. Le liste di Wikipedia, anche quelle specifiche, si moltiplicano come una delle operazioni a vantaggio . Quindi, perché x86 ha istruzioni separate per ciascuno, mul e imul ? È ancora […]

Cos’è lo stack frame nell’assemblaggio?

Qual è la struttura di uno stack frame e come viene utilizzata durante il richiamo di funzioni in assembly?

Qual è il significato degli accessi di memoria “non temporali” in x86

Questa è una domanda un po ‘di basso livello. Nell’assembly x86 ci sono due istruzioni SSE: MOVDQA xmmi, m128 e MOVNTDQA xmmi, m128 Il Manuale dello sviluppatore del software IA-32 dice che l’ NT in MOVNTDQA sta per Non Temporal , e che altrimenti è lo stesso di MOVDQA. La mia domanda è, cosa significa […]

SIMD firmato con moltiplicazione non firmata per 64 bit * da 64 bit a 128 bit

Ho creato una funzione che esegue 64-bit * da 64-bit a 128-bit usando SIMD. Attualmente l’ho implementato usando SSE2 (acutally SSE4.1). Ciò significa che esegue due prodotti da 64b * 64b a 128b contemporaneamente. La stessa idea potrebbe essere estesa a AVX2 o AVX512 fornendo quattro o otto prodotti 64b * da 64 a 128b […]

Assemblaggio, stampa del numero di ascii

Ho un problema con il mio codice assembly. Voglio stampare il numero memorizzato nel registro cx, ma quando ho provato a stamparlo, ha stampato caratteri ascii invece del numero ASCII, così ho deciso di scrivere una procedura per convertire il carattere ASCII in ASCII. Il problema è che quando provo a chiamare quella procedura, il […]

ADD 1 è davvero più veloce di INC? x86

Ho letto varie guide all’ottimizzazione secondo cui ADD 1 è più veloce rispetto all’utilizzo di INC in x86. È proprio vero?