Articles of x86

Perché la divisione intera di -1 (quella negativa) risulta in FPE?

Ho l’incarico di espiare alcuni comportamenti apparentemente strani del codice C (in esecuzione su x86). Posso completare facilmente tutto il resto ma questo mi ha davvero confuso. -2147483648 codice 1 output -2147483648 int a = 0x80000000; int b = a / -1; printf(“%d\n”, b); Lo snippet di codice 2 non restituisce nulla e restituisce Floating […]

Errore strano di MSC 8.0: “Il valore di ESP non è stato salvato correttamente attraverso una chiamata di funzione …”

Recentemente abbiamo tentato di suddividere alcuni dei nostri progetti di Visual Studio in librerie e tutto sembrava compilare e build bene in un progetto di test con uno dei progetti di libreria come dipendenza. Tuttavia, il tentativo di eseguire l’applicazione ci ha dato il seguente brutto messaggio di errore in fase di esecuzione: Errore in […]

Modalità di indirizzamento in linguaggio assembly (IA-32 NASM)

Dato che le risorse web su questo argomento sono scarse, inizierò, a beneficio delle ricerche future, elencando le modalità degli indirizzi per IA-32 Assembly Language (NASM) e poi seguirò una breve domanda. Registro di indirizzamento mov eax, ebx: copia ciò che è in ebx in eax mov esi, var: Copia l’indirizzo di var (ad esempio […]

Codice di auto modifica sempre errori di segmentazione su Linux

ho trovato un articolo sul codice di auto modifica e ho cercato di fare alcuni esempi, ma ottengo sempre errori di segmentazione. Come posso capire, c’è una violazione nelle autorizzazioni di memoria. Il segmento di codice è (r) ead / e (x) ecute e quindi il tentativo di scrivere risultati a questo errore. C’è un […]

X86 CMPXCHG è atomico?

La documentazione di Intel a http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf dice “Questa istruzione può essere utilizzata con un prefisso LOCK per consentire l’esecuzione dell’istruzione atomicamente.” La mia domanda è CMPXCHG può funzionare con l’indirizzo di memoria? Dal documento sembra non esserlo, ma qualcuno può confermare che funziona solo con VALUE effettivi nei registri, non nell’indirizzo di memoria? Se CMPXCHG […]

Perché non è ansible impostare direttamente il puntatore dell’istruzione?

L’articolo di Wikipedia sull’assemblaggio x86 dice che “il registro IP non è accessibile direttamente dal programmatore”. Direttamente significa con istruzioni come MOV e Aggiungi. Perchè no? Qual è la ragione di questo? Quali sono le restrizioni tecniche?

Prestazioni inaspettatamente povere e stranamente bimodali per il ciclo di acquisto su Intel Skylake

Vedo prestazioni inaspettatamente scadenti per un semplice ciclo del negozio che ha due negozi: uno con un passo in avanti di 16 byte e uno che è sempre nella stessa posizione 1 , come questo: volatile uint32_t value; void weirdo_cpp(size_t iters, uint32_t* output) { uint32_t x = value; uint32_t *rdx = output; volatile uint32_t *rsi […]

Come leggere e scrivere registri flag x86 direttamente?

Da quello che ho letto, sembra che ci siano 9 bandiere diverse. È ansible leggerli / modificarli direttamente? So che posso sapere per esempio se il flag zero è impostato dopo aver fatto un’istruzione cmp / jmp, ma sto chiedendo se è ansible fare qualcosa come mov eax, flags o qualcosa. Inoltre, per scrivere, è […]

Atomicità su x86

8.1.2 Blocco del bus I processori Intel 64 e IA-32 forniscono un segnale LOCK # che viene affermato automaticamente durante determinate operazioni di memoria critica per bloccare il bus di sistema o il collegamento equivalente. Mentre viene affermato questo segnale di uscita, vengono bloccate richieste da altri processori o agenti bus per il controllo del […]

requisiti di allineamento per le istruzioni atomiche x86

Microsoft offre la funzione InterlockedCompareExchange per l’esecuzione di operazioni di confronto e scambio atomiche. Esiste anche un intrinseco _InterlockedCompareExchange . Su x86 questi sono implementati usando l’istruzione cmpxchg . Tuttavia, leggendo la documentazione su questi tre approcci, non sembrano concordare i requisiti di allineamento. Il manuale di riferimento di Intel non dice nulla sull’allineamento (a […]