Articles of x86

La forma más rápida de calcular un módulo entero de 128 bits un entero de 64 bits

Tengo un entero A de 128 bits sin signo y un entero sin signo de 64 bits B. ¿Cuál es la forma más rápida de calcular A % B , es decir, el rest (de 64 bits) de dividir A entre B? Estoy buscando hacer esto en C o en lenguaje ensamblador, pero tengo que […]

Qué significa “rep; nop; “¿significa en ensamblaje x86? ¿Es lo mismo que la instrucción de “pausa”?

¿Qué hace rep; nop rep; nop significa? ¿Es lo mismo que la instrucción de pause ? ¿Es lo mismo que rep nop (sin el punto y coma)? ¿Cuál es la diferencia con la instrucción simple nop ? ¿Se comporta de manera diferente en los procesadores AMD e Intel? (bonificación) ¿Dónde está la documentación oficial para […]

Ensamblaje – JG / JNLE / JL / JNGE después de CMP

No entiendo las JG/JNLE/JL/JNGE , que vienen después de CMP. por ejemplo, si tengo: CMP al,dl jg label1 Cuando al=101; dl =200 al=101; dl =200 . ¿En lo que le preguntamos al jg ? ¿Está en al>dl ? o al-dl>0 ? La misma prolbem en el siguiente código: test al,dl jg label1 No entiendo lo […]

¿Tiene algún sentido utilizar la instrucción LFENCE en procesadores x86 / x86_64?

A menudo en Internet encuentro que LFENCE no tiene sentido en los procesadores x86, es decir, no hace nada, por lo tanto, en vez de MFENCE , podemos usar absolutamente absolutamente SFENCE , porque MFENCE = SFENCE + LFENCE = SFENCE + NOP = SFENCE . Pero si LFENCE no tiene sentido, entonces ¿por qué […]

Imprimir un entero como una cadena con syntax AT & T, con llamadas al sistema Linux en lugar de printf

He escrito un progtwig de ensamblaje para mostrar el factorial de un número siguiendo la syntax AT & t. Pero no funciona. Aquí está mi código .text .globl _start _start: movq $5,%rcx movq $5,%rax Repeat: #function to calculate factorial decq %rcx cmp $0,%rcx je print imul %rcx,%rax cmp $1,%rcx jne Repeat # Now result of […]

Optimice para una multiplicación rápida pero lenta: FMA y doubledouble

Cuando obtuve por primera vez un procesador Haswell, traté de implementar FMA para determinar el conjunto de Mandelbrot. El algoritmo principal es este: intn = 0; for(int32_t i=0; i<maxiter; i++) { floatn x2 = square(x), y2 = square(y); //square(x) = x*x floatn r2 = x2 + y2; booln mask = r2<cut; //booln is in the […]

¿Cuál es el motor de stack en la microarchitecture Sandybridge?

Estoy leyendo http://www.realworldtech.com/sandy-bridge/ y tengo algunos problemas para comprender algunos problemas: El rastreador de puntero de stack dedicado también está presente en Sandy Bridge y cambia el nombre del puntero de la stack, eliminando las dependencias en serie y eliminando una cantidad de uops. ¿Qué es realmente un dedicated stack pointer tracker ? Para Sandy […]

¿Hay una instrucción inversa a la instrucción movemask en Intel avx2?

Las instrucciones movemask toman un __m256i y devuelven un int32 donde cada bit (el primero 4, 8 o los 32 bits dependiendo del tipo de elemento vector de entrada) es el bit más significativo del elemento vector correspondiente. Me gustaría hacer lo contrario: tomar un 32 (donde solo los 4, 8 o 32 bits menos […]

¿Por qué es (o no es) SFENCE + LEFENCE equivalente a MFENCE?

Como sabemos por una respuesta previa a ¿Tiene algún sentido la instrucción LFENCE en los procesadores x86 / x86_64? que no podemos usar SFENCE lugar de MFENCE para la consistencia secuencial. Una respuesta sugiere que MFENCE = SFENCE + LFENCE , es decir, que LFENCE hace algo sin lo cual no podemos proporcionar consistencia secuencial. […]

x86 Instrucción MUL de VS 2008/2010

¿Los conjuros modernos (2008/2010) de Visual Studio o Visual C ++ Express producirán instrucciones MULM de x86 (multiplicación sin signo) en el código comstackdo? Parece que no puedo encontrar un ejemplo en el que aparezcan en código comstackdo, incluso cuando se usan tipos sin firmar. Si VS no comstack utilizando MUL, ¿hay alguna razón por […]