Articles of x86

Bucle con llamada de función más rápido que un bucle vacío

Ligé algunos ensambles con algunos c para probar el costo de una llamada a función, con el siguiente ensamblado yc fuente (usando fasm y gcc respectivamente) assembly: format ELF public no_call as “_no_call” public normal_call as “_normal_call” section ‘.text’ executable iter equ 100000000 no_call: mov ecx, iter @@: push ecx pop ecx dec ecx cmp […]

fragmento de código de máquina políglota x86-32 / x86-64 que detecta el modo de 64 bits en tiempo de ejecución?

¿Es posible que los mismos bytes de código de máquina determinen si se están ejecutando en el modo de 32 o 64 bits y luego hacen cosas diferentes? es decir, escribir código de máquina políglota . Normalmente puede detectar en tiempo de comstackción con #ifdef macros. O en C, podría escribir un if() con una […]

Rendimiento relativo de x86 inc contra instrucción add

Pregunta rápida, asumiendo de antemano mov eax, 0 que es mas eficiente? inc eax inc eax o add eax, 2 Además, en caso de que los dos inc sean más rápidos, ¿los comstackdores (es decir, el GCC) comúnmente (es decir, sin indicadores de optimización agresivos) optimizan var += 2 en él? ¡Gracias por tu tiempo! […]

¿Cómo apagar la computadora desde un entorno independiente?

Estoy haciendo un sistema operativo en modo protegido basado en la architecture x86 de Intel, y estaba buscando información sobre cómo apagar la computadora a través del código ensamblador, o algo así. ¿Podrías ayudarme con este problema?

¿Por qué la división entera por -1 (negativo) resulta en FPE?

Tengo una asignación de expandir algunos comportamientos aparentemente extraños del código C (ejecutándose en x86). Puedo completar fácilmente todo lo demás, pero este realmente me ha confundido. Fragmento de código 1 salidas -2147483648 int a = 0x80000000; int b = a / -1; printf(“%d\n”, b); El fragmento de código 2 no genera nada y proporciona […]

Diferencia entre JA y JG en el ensamblaje

¿Puede decirme por favor la diferencia entre SALTAR SI ARRIBA Y SALTAR SI ES MAYOR en el idioma ensamblador? ¿Cuándo uso cada uno de ellos? ¿me dan resultados diferentes?

Error extraño de MSC 8.0: “El valor de ESP no se guardó correctamente en una llamada de función …”

Recientemente, intentamos separar algunos de nuestros proyectos de Visual Studio en bibliotecas, y todo pareció comstackrse y comstackrse en un proyecto de prueba con uno de los proyectos de la biblioteca como una dependencia. Sin embargo, al intentar ejecutar la aplicación nos dio el siguiente mensaje de error desagradable en tiempo de ejecución: Error de […]

¿Imprimir un número en lenguaje ensamblador?

mov al,10 add al,15 ¿Cómo imprimo el valor de ‘ al ‘?

Modos de direccionamiento en lenguaje ensamblador (IA-32 NASM)

Como los recursos web en este campo son escasos, comenzaré por listar los modos de dirección para el lenguaje de ensamblaje IA-32 (NASM) y, a continuación, haré un seguimiento con una pregunta rápida. Registro de direcciones mov eax, ebx: copia lo que está en ebx en eax mov esi, var: copia la dirección de var […]

Obtener ciclos de CPU usando RDTSC: ¿por qué el valor de RDTSC siempre aumenta?

Quiero obtener los ciclos de la CPU en un punto específico. Yo uso esta función en ese punto: static __inline__ unsigned long long rdtsc(void) { unsigned long long int x; __asm__ volatile (“.byte 0x0f, 0x31” : “=A” (x)); return x; } El problema es que devuelve siempre un número creciente (en cada ejecución). Es como […]