Articles of x86

Quale tecnica di mapping della cache viene utilizzata nel processore Intel Core i7?

Ho appreso diverse tecniche di mapping della cache come la mapping diretta, la mapping associata e la tecnica di mapping associativa e ho anche imparato i trade-off. Ma sono curioso di sapere cosa viene utilizzato oggigiorno nel processore intel core i7 o AMD. E come si evolvono le tecniche. E quali sono le cose che […]

Come funziona esattamente l’istruzione x86 LOOP?

mov ecx, 16 looptop: . . . loop looptop Quante volte verrà eseguito questo ciclo? Cosa succede se ecx = 0 per iniziare? In questo caso, il loop salta o fallisce?

Cosa significano i prefissi E e R nei nomi dei registri Intel a 32 bit e 64 bit?

I nomi dei registri a 32 bit iniziano con una E e quelli a 64 bit iniziano con una R. Che cosa rappresentano E e R? C’è un motivo per scegliere questi alfabeti? Inoltre, anche nei registri a 64 bit, possiamo vedere in qualsiasi debugger di basso livello come Windbg che i bit più a […]

Come smontare il codice del settore di avvio x86 a 16 bit in GDB con “x / i $ pc”? Viene trattato come 32-bit

Ad esempio, con un settore di avvio che il BIOS stampa sullo schermo main.asm : org 0x7c00 bits 16 cli mov ax, 0x0E61 int 0x10 hlt times 510 – ($-$$) db 0 dw 0xaa55 Poi: nasm -o main.img main.asm qemu-system-i386 -hda main.img -S -s & gdb -ex ‘target remote localhost:1234’ \ -ex ‘break *0x7c00’ \ […]

Cosa fa il cltq in assembly?

0x0000000000400553 : mov -0x4(%rbp),%eax 0x0000000000400556 : cltq 0x0000000000400558 : shl $0x3,%rax 0x000000000040055c : mov %rax,%rdx In realtà il mio programma è semplice come: 5 int main(int argc, char *argv[]) { 6 int i = 0; 7 while(environ[i]) { 8 printf(“%s\n”, environ[i++]); 9 } 10 return 0; Ma l’output dell’assieme è piuttosto lungo: Dump of assembler […]

sul assembly CF (Carry) e OF (Overflow) flag

È noto che CF indica l’esecuzione non firmata e OF indica un overflow firmato. Quindi, come fa un programma di assemblaggio a distinguere tra i dati non firmati e quelli firmati poiché è solo una sequenza di bit? (Tramite memoria aggiuntiva per informazioni sul tipo, o tramite informazioni sulla posizione o altro?) E queste due […]

Il modo più veloce per calcolare il valore assoluto usando SSE

Sono a conoscenza di 3 metodi, ma per quanto ne so, solo i primi 2 sono generalmente utilizzati: 1) Maschera il bit del segno usando andps o andnotps . Pro: un’istruzione veloce se la maschera è già in un registro, il che lo rende perfetto per farlo più volte in un ciclo. Contro: La maschera […]

Registro di sistema Windows a 64 bit e registro a 32 bit

Ho sentito sull’architettura Windows x64, al fine di supportare l’esecuzione di entrambe le applicazioni x86 e x64, ci sono due set separati / diversi di registro di Windows: uno per accedere all’applicazione x86 e l’altro per l’applicazione x64 per l’accesso? Ad esempio, se una COM registra CLSID nella serie x86 di registro, l’applicazione x64 non […]

Efficiente funzione di confronto tra interi

La funzione compare è una funzione che accetta due argomenti a e b e restituisce un intero che descrive il loro ordine. Se a è minore di b , il risultato è un numero intero negativo. Se a è maggiore di b , il risultato è un numero intero positivo. Altrimenti, b sono uguali e […]

Come eseguire l’inverso di _mm256_movemask_epi8 (VPMOVMSKB)?

L’intrinseco: int mask = _mm256_movemask_epi8(__m256i s1) crea una maschera, con i suoi 32 bit corrispondenti al bit più significativo di ogni byte di s1 . Dopo aver manipolato la maschera usando operazioni di bit ( BMI2 per esempio) vorrei eseguire l’inverso di _mm256_movemask_epi8 , cioè creare un vettore __m256i con il bit più significativo di […]