Articles of assembly

Vetorização com buffers desalinhados: usando VMASKMOVPS: gerando uma máscara a partir de uma contagem de desalinhamento? Ou não usar esse insn em tudo

O gcc 5.3 com -O3 -mavx -mtune=haswell para x86-64 -O3 -mavx -mtune=haswell código surpreendentemente volumoso para manipular inputs potencialmente desalinhadas para código como: // convenient simple example of compiler input // I’m not actually interested in this for any real program void floatmul(float *a) { for (int i=0; i<1024 ; i++) a[i] *= 2; } […]

Diferença no desempenho entre o MSVC e o GCC para um código de multiplicação de matriz altamente otimizado

Estou vendo uma grande diferença no desempenho entre o código compilado no MSVC (no Windows) e no GCC (no Linux) para um sistema Ivy Bridge. O código faz multiplicação de matriz densa. Estou obtendo 70% dos flops de pico com GCC e apenas 50% com MSVC. Acho que posso ter isolado a diferença de como […]

Qual é o propósito de XORing um registro com ele mesmo?

xor eax, eax sempre eax a zero, certo? Então, por que o MSVC ++ às vezes o coloca no código do meu executável? É mais eficiente que mov eax, 0 ? 012B1002 in al,dx 012B1003 push ecx int i = 5; 012B1004 mov dword ptr [i],5 return 0; 012B100B xor eax,eax Além disso, o que […]

Ponto flutuante duplo atômico ou carregamento / armazenamento vetorial SSE / AVX em x86_64

Aqui (e em algumas perguntas do SO) eu vejo que o C ++ não suporta algo como std::atomic lock> livre e ainda não pode suportar algo como o vetor AVX / SSE atômico porque é dependente do CPU (embora atualmente de CPUs que eu conheço, ARM, AArch64 e x86_64 têm vetores). Mas há suporte em […]

falha de segmentação por gravação de código shell execve

Eu estou tentando estudar shellcode execve, SO: Linux bt 2.6.39.4 root @ bt: ~ / exploit # cat gshell.s .globl _start _start: nop jmp MyString shell: popl %esi xorl %eax,%eax movl %al,9(%esi) movl %esi,10(%esi) movl %eax,14(%esi) movb $11,%al movl %esi, %ebx leal 0xa(%esi),%ecx leal 0xe(%esi),%edx int $0x80 movl $1,%eax movl $0,%ebx int $0x80 MyString: call […]

Bomba Binária – Fase 4

Estou tendo um tempo muito difícil de rastrear o código de assembly para a bomba binária a seguir (uma atribuição da escola onde uma bomba tem que ser desativada, esta bomba contém 6 fases que todos têm 1 input correta para prosseguir para a próxima fase). Eu estou atualmente em phase_4 e tem uma function […]

Assembly 8086 | Soma de uma matriz, imprimindo números com vários dígitos

Eu escrevi um código bem simples em asm x8086 e estou enfrentando um erro. Se alguém pudesse me ajudar com uma breve explicação, eu agradeceria muito. IDEAL MODEL small STACK 100h DATASEG ; ————————– array db 10h, 04h, 04h, 04h, 04h, 04h, 04h, 04h, 04h, 04h sum db 0 ; ————————– CODESEG start: mov ax, […]

Assembly Language (x86): Como criar um loop para calcular a seqüência de Fibonacci

Eu estou programando linguagem assembly (x86) em MASM usando o Visual Studio 2013 Ultimate. Eu estou tentando usar uma matriz para calcular uma seqüência de Fibonacci para n elementos usando uma matriz. Em outras palavras, estou tentando ir para um elemento de matriz, obter os dois elementos antes, adicioná-los e armazenar o resultado em outra […]

Como imprimir um flutuador de precisão única com printf

Eu estou tentando imprimir um número de ponto flutuante no assembly x86_64 mas apenas imprime o valor como zero. Há algumas perguntas sobre isso já. Um parece ser resolvido garantindo que você defina o número de registradores vetoriais que você está usando em% al . Outro mostrou que você precisa ter um alinhamento de pilha […]

O hardware x86 moderno não pode armazenar um único byte na memory?

Falando do modelo de memory de C ++ para concorrência, a linguagem de programação C ++ da Stroustrup , 4ª ed., Seita. 41.2.1, diz: … (como o hardware mais moderno), a máquina não pode carregar ou armazenar nada menor que uma palavra. No entanto, meu processador x86, com alguns anos de idade, pode e armazena […]