Articles of x86 64

¿Por qué los sistemas x86-64 solo tienen un espacio de direcciones virtuales de 48 bits?

En un libro, leo lo siguiente: Los procesadores de 32 bits tienen 2 ^ 32 direcciones posibles, mientras que los procesadores actuales de 64 bits tienen un espacio de direcciones de 48 bits Mi expectativa era que si se trata de un procesador de 64 bits, el espacio de direcciones también debería ser de 2 […]

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 […]

¿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 […]

¿Por qué System V / AMD64 ABI exige una alineación de astackmiento de 16 bytes?

He leído en diferentes lugares que se hace por “razones de rendimiento”, pero todavía me pregunto cuáles son los casos particulares en los que el rendimiento mejora con esta alineación de 16 bytes. O, en cualquier caso, ¿cuáles fueron las razones por las cuales se eligió esto? editar : estoy pensando que escribí la pregunta […]

¿Por qué las llamadas al sistema x86-64 Linux modifican RCX y qué significa el valor?

Estoy tratando de asignar algo de memoria en Linux con sys_brk syscall. Esto es lo que intenté: BYTES_TO_ALLOCATE equ 0x08 section .text global _start _start: mov rax, 12 mov rdi, BYTES_TO_ALLOCATE syscall mov rax, 60 syscall Lo que pasa es que, según la convención de llamadas de Linux, esperaba que el valor de retorno estuviera […]

Laboratorio de bombas phase_4

Dump of assembler code for function func4 : mov %rbx,-0x18(%rsp) : mov %rbp, -0x10(%rsp) : mov %r12,-0x8(%rsp) : sub $0x18,%rsp : mov %edi,%ebx : mov %esi,%ebp : test %edi, %edi : jg 0x400fb2 : mov $0x0,%ebp : jmp 0x400fd2 cmp $0x1, %edi : je 0x400fd2 : lea -0x1(%rbx),%edi : callq 0x400f90 : mov %eax,%r12d : […]

¿Hay un número entero de 128 bits en gcc?

Quiero un número entero de 128 bits porque quiero almacenar los resultados de la multiplicación de dos números de 64 bits. ¿Hay algo así en gcc 4.4 y superior?

¿Por qué el acceso desalineado a la memoria mmaped algunas veces segfault en AMD64?

Tengo esta pieza de código que segfaults cuando se ejecuta en Ubuntu 14.04 en una CPU compatible con AMD64: #include #include #include int main() { uint32_t sum = 0; uint8_t *buffer = mmap(NULL, 1<<18, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); uint16_t *p = (buffer + 1); int i; for (i=0;i<14;++i) { //printf("%d\n", i); sum += p[i]; } […]

¿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. […]