Articles of assembly

Lenguaje ensamblador – ¿Cómo hacer Modulo?

¿Hay algo así como un módulo operador en x86 Assembler?

x86_64 registra rax / eax / ax / al sobrescribir los contenidos completos del registro

Como se anuncia ampliamente, los procesadores x86_64 modernos tienen registros de 64 bits que se pueden usar de manera compatible con versiones anteriores como registros de 32 bits, registros de 16 bits e incluso registros de 8 bits, por ejemplo: 0x1122334455667788 ================ rax (64 bits) ======== eax (32 bits) ==== ax (16 bits) == ah […]

Diferencia entre rdtscp, rdtsc: memoria y cpuid / rdtsc?

Supongamos que estamos tratando de usar el tsc para la supervisión del rendimiento y queremos evitar el reordenamiento de la instrucción. Estas son nuestras opciones: 1: rdtscp es una llamada de serialización. Evita el reordenamiento de la llamada a rdtscp. __asm__ __volatile__(“rdtscp; ” // serializing read of tsc “shl $32,%%rdx; ” // shift higher 32 […]

Asamblea x86 en una Mac

¿Alguien sabe de alguna buena herramienta (estoy buscando IDE) para escribir el ensamblaje en la Mac? Xcode es un poco engorroso para mí. Además, en los Intel Macs, ¿puedo usar el asm genérico x86? ¿O hay un conjunto de instrucciones modificado? Cualquier información sobre la publicación de Intel. Además, sé que en Windows, asm puede […]

¿Por qué es importante romper la “dependencia de salida” de LZCNT?

Al hacer una evaluación comparativa de algo, medí un rendimiento mucho más bajo de lo que había calculado, que reduje a la instrucción LZCNT (también ocurre con TZCNT), como se demuestra en los siguientes puntos de referencia: xor ecx, ecx _benchloop: lzcnt eax, edx add ecx, 1 jnz _benchloop Y: xor ecx, ecx _benchloop: xor […]

Impresión de dígitos hexadecimales con ensamblaje

Estoy tratando de aprender el ensamblado de NASM, pero parece que estoy luchando con lo que parece simplemente en los lenguajes de alto nivel. Todos los libros de texto que estoy usando discuten usando cuerdas, de hecho, esa parece ser una de sus cosas favoritas. Imprimiendo hola mundo, cambiando de mayúscula a minúscula, etc. Sin […]

En C, dada una lista variable de argumentos, ¿cómo crear una llamada a función usándolos?

Supongamos que hay una lista de argumentos almacenados de alguna manera, en una matriz, por ejemplo. Dado un puntero de función , ¿cómo podría hacer una llamada pasando la lista de argumentos almacenados? No estoy tratando de pasar la matriz como un argumento bien. Lo tienes, ¿está bien? Quiero pasar cada uno de sus elementos […]

¿Qué hace NOPL en el sistema x86?

¿Cuál es la función de NOPL en la máquina x86? Parece que no hace nada, pero ¿por qué siempre está en el código de ensamblaje?

¿Por qué% eax se pone a cero antes de una llamada a printf?

Estoy tratando de recoger un poco de x86. Estoy comstackndo en un mac de 64 bits con gcc -S-O0. Código en C: printf(“%d”, 1); Salida: movl $1, %esi leaq LC0(%rip), %rdi movl $0, %eax ; WHY? call _printf No entiendo por qué% eax se borra a 0 antes de llamar a ‘printf’. Como printf devuelve […]

¿Puede x86 reordenar una tienda estrecha con una carga más amplia que la contiene por completo?

El Manual del desarrollador de software Intel® 64 e IA-32 Architectures dice: 8.2.3.4 Las cargas pueden reordenarse con tiendas anteriores en diferentes ubicaciones El modelo de ordenamiento de memoria Intel-64 permite reordenar una carga con una tienda anterior a una ubicación diferente. Sin embargo, las cargas no se reordenan con las tiendas en la misma […]