Preguntas con la etiqueta [assembly]
¿Se requiere una extensión de signo o cero al agregar un desplazamiento de 32 bits a un puntero para la ABI x86-64?
Resumen: Estaba mirando el código ensamblador para guiar mis optimizaciones y vi muchas extensiones de signo o cero al agregar int32 a un puntero. void Test(int *out, int offset) {
Un par de preguntas sobre [base + índice*escala + disp] y AT&T disp(base, índice, escala)
La forma general para el direccionamiento de memoria en Intel y AT&T Syntax es la siguiente: [base + index*scale + disp] # Intel, including GAS .intel_syntax noprefix disp(base, index, scale)
¿Cuál es la dirección del crecimiento de la pila en la mayoría de los sistemas modernos?
Estoy preparando algunos materiales de capacitación en C y quiero que mis ejemplos se ajusten al modelo de pila típico. ¿En qué dirección crece una pila C en Linux, Windows,
¿Cuál es la diferencia entre .fun: y fun: en lenguaje ensamblador?
.section .data msg1: .asciz "Hello1: %d\r\n" msg2: .asciz "Hello2: %d\r\n" .section .text .global main main: mov r4, #0 .loop: cmp r4, #5 bge .endloop ldr r0, =msg1 mov r1, r4
Diferencia entre movq y movabsq en x86-64
Me refiero a instrucciones de movimiento de datos en la arquitectura Intel x86-64. He leído que la movqinstrucción normal solo puede tener operandos de origen inmediatos que pueden representarse como
Cómo funciona la entrada almacenada en búfer
La entrada en el siguiente programa (usando la función DOS.BufferedInput 0Ah) funciona bien, pero cuando pido mostrar la salida, DOS no muestra nada en absoluto. ¿Cómo es esto posible? ORG
¿Cómo puedo multiplicar y dividir usando solo el desplazamiento y la suma de bits?
¿Cómo puedo multiplicar y dividir usando solo el desplazamiento y la suma de bits?
¿Cuándo el ensamblaje es más rápido que C? [cerrado]
Una de las razones declaradas para conocer el ensamblador es que, en ocasiones, se puede utilizar para escribir código que tendrá más rendimiento que escribir ese código en un lenguaje
Las ventajas de utilizar registros/instrucciones de 32 bits en x86-64
A veces, gcc usa un registro de 32 bits, cuando yo esperaría que usara un registro de 64 bits. Por ejemplo el siguiente código C: unsigned long long div(unsigned long
¿Por qué Windows64 utiliza una convención de llamadas diferente a la de todos los demás sistemas operativos en x86-64?
AMD tiene una especificación ABI que describe la convención de llamadas que se utilizará en x86-64. Todos los sistemas operativos lo siguen, excepto Windows, que tiene su propia convención de
¿Probar si un registro es cero con CMP reg,0 vs OR reg,reg?
¿Existe alguna diferencia en la velocidad de ejecución usando el siguiente código? cmp al, 0 je done y lo siguiente: or al, al jz done Sé que las instrucciones JE
imprimir una variable __m128i
Estoy tratando de aprender a codificar usando elementos intrínsecos y a continuación hay un código que suma compiler used: icc #include<stdio.h> #include<emmintrin.h> int main() { __m128i a = _mm_set_epi32(1,2,3,4); __m128i
Tome varias entradas e imprímalas
Este es mi programa: data segment str1 db "What is your name: $" str2 db "How old are you? $" str3 db 13,10, "Name Output is: $" str4 db 13,10,
¿Cuántos bytes envía la instrucción push a la pila cuando no especifico el tamaño del operando?
Puedo insertar 4 bytes en la pila haciendo esto: push DWORD 123 Pero descubrí que puedo usar pushsin especificar el tamaño del operando: push 123 En este caso, ¿cuántos bytes
¿Es seguro leer más allá del final de un búfer dentro de la misma página en x86 y x64?
Muchos métodos que se encuentran en algoritmos de alto rendimiento podrían (y se simplifican) simplificarse si se les permitiera leer una pequeña cantidad más allá del final de los buffers