Articles of assembly de

Por que o XCHG reg registra 3 instruções de microinstruções em arquiteturas modernas da Intel?

Eu estou fazendo micro-otimização em uma parte crítica do desempenho do meu código e me deparei com a seqüência de instruções (na syntax da AT & T): add %rax, %rbx mov %rdx, %rax mov %rbx, %rdx Eu pensei que finalmente tinha um caso de uso para xchg que me permitiria raspar uma instrução e escrever: […]

Instrução x86 MUL da VS 2008/2010

Será que os encantamentos modernos (2008/2010) do Visual Studio ou Visual C ++ Express produzem instruções x86 MUL (multiplicação sem sinal) no código compilado? Eu não consigo encontrar ou inventar um exemplo onde eles aparecem no código compilado, mesmo quando usando tipos não assinados. Se o VS não compilar usando o MUL, há uma razão […]

Quais são os segmentos e offset no endereçamento de memory em modo real?

Eu estou lendo sobre endereçamento de memory. Eu li sobre o deslocamento do segmento e, em seguida, sobre o deslocamento do descritor. Eu sei como calcular os endereços exatos no modo real. Tudo isso está OK, mas não consigo entender o que é exatamente o deslocamento? Em todo lugar que eu leio: No modo real, […]

É possível chamar uma function não exportada que reside em um exe?

Gostaria de chamar uma function que resida em um .exe de terceiros e obter seu resultado. Parece que deveria haver um jeito, desde que eu saiba o endereço da function, convenção de chamada, etc … mas eu não sei como. Alguém sabe como eu faria isso? Eu percebo que qualquer solução seria um hack não […]

Quais methods podem ser usados ​​para estender eficientemente o comprimento da instrução no x86 moderno?

Imagine que você queira alinhar uma série de instruções de assembly x86 a determinados limites. Por exemplo, você pode querer alinhar loops a um limite de 16 ou 32 bytes, ou instruções de pacote para que eles sejam eficientemente colocados no cache do uop ou o que for. A maneira mais simples de conseguir isso […]

Qual é o caminho mais rápido para converter float para int em x86

Qual é a maneira mais rápida de converter um número de ponto flutuante em um int em uma CPU x86? De preferência em C ou conjunto (que pode ser alinhado em C) para qualquer combinação dos seguintes: 32/64/80-bit float -> inteiro de 32/64 bits Eu estou procurando por alguma técnica que é mais rápida do […]

O x86 pode reordenar um armazenamento restrito com uma carga mais ampla que o contenha totalmente?

O Manual do Desenvolvedor de Software de Arquiteturas Intel® 64 e IA-32 diz: 8.2.3.4 As cargas podem ser reordenadas em lojas anteriores para diferentes locais O modelo de pedido de memory Intel-64 permite que uma carga seja reordenada com um armazenamento anterior para um local diferente. No entanto, as cargas não são reordenadas com as […]

Exemplos de Pré-busca?

Alguém pode dar um exemplo ou um link para um exemplo que usa __builtin_prefetch no GCC (ou apenas a instrução asm prefetcht0 em geral) para obter uma vantagem substancial de desempenho? Em particular, gostaria que o exemplo atendesse aos seguintes critérios: É um exemplo simples, pequeno e independente. Remover a instrução __builtin_prefetch resulta em degradação […]

Como faço para desmontar o código x86 bruto?

Eu gostaria de desmontar o MBR (primeiros 512 bytes) de um disco x86 inicializável que eu tenho. Eu copiei o MBR para um arquivo usando dd if=/dev/my-device of=mbr bs=512 count=1 Alguma sugestão para um utilitário Linux que pode desmontar o arquivo mbr ?

x86_64 – Condições de loop de assembly e fora de ordem

Eu não estou pedindo um benchmark. ( Se esse fosse o caso, eu teria feito isso sozinho ) . Minha pergunta: Eu tenho a tendência de evitar os modos de endereçamento indireto / índice por conveniência. Como substituto, costumo usar o endereçamento imediato, absoluto ou de registro. O código: ; %esi has the array address. […]