Articles of x86

Arquivos de header para intrínsecos do SIM86 x86

Quais arquivos de header fornecem os intrínsecos para as diferentes extensões do conjunto de instruções x86 SIMD (MMX, SSE, AVX, …)? Parece impossível encontrar essa lista online. Corrija-me se eu estiver errado.

obter comprimento de string no GNU Assembler embutido

Eu estou re-aprendendo assembler que eu usei em máquinas MS-DOS muito antigas !!! Este é o meu entendimento de como essa function deve ser. Ele compila mas trava com um SIGSEGV ao tentar colocar 0xffffffff no ecx . O código é executado em uma máquina virtual com Debian de 32 bits. Qualquer ajuda seria apreciada. […]

Redução de sum de bytes não assinados sem estouro, usando SSE2 na Intel

Eu estou tentando encontrar redução de sum de 32 elementos (cada dados de 1 byte) em um processador Intel i3. Eu fiz isso: s=0; for (i=0; i<32; i++) { s = s + a[i]; } No entanto, está demorando mais, já que meu aplicativo é um aplicativo em tempo real que requer muito menos tempo. […]

Instrução jmp lenta

Na sequência da minha pergunta As vantagens de usar 32bits registradores / instruções em x86-64 , comecei a medir os custos das instruções. Estou ciente de que isso foi feito várias vezes (por exemplo, Agner Fog ), mas estou fazendo isso por diversão e auto-educação. Meu código de teste é bem simples (para simplicidade aqui […]

Loop com chamada de function mais rápida que um loop vazio

Eu vinculei uma assembly com um pouco de c para testar o custo de uma chamada de function, com o seguinte conjunto e fonte c (usando fasm e 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 […]

Como desligar o computador de um ambiente independente?

Eu estou fazendo um sistema operacional de modo protegido baseado na arquitetura x86 da Intel, e estava procurando por algumas informações sobre como desligar o computador via código assembly, ou algo parecido. Você poderia me ajudar com esse problema?

Obtendo o valor máximo em um vetor __m128i com SSE?

Acabei de começar a usar o SSE e estou confuso como obter o valor inteiro máximo ( max ) de um __m128i . Por exemplo: __m128i t = _mm_setr_ps(0,1,2,3); // max(t) = 3; Pesquisando por aí me levou a instrução MAXPS mas não consigo encontrar como usar isso com “xmmintrin.h” . Além disso, existe alguma […]

Assembly ADC (Adicionar com carry) para C ++

Existe uma instrução de assembly ADC . Eu encontrei isso significa “Adicionar com transportar”. Mas eu não sei o que isso significa. Ou como escrever esta instrução em C ++. E eu sei que não é o mesmo que ADD . Então, fazer uma sum simples não está correta. INFO: Compilado no Windows. Estou usando […]

Fragmento de código de máquina poliglota x86-32 / x86-64 que detecta o modo de 64 bits em tempo de execução?

É possível que os mesmos bytes de código de máquina descubram se estão sendo executados no modo 32 ou 64 bits e, em seguida, fazem coisas diferentes? ou seja, escrever código de máquina poliglota . Normalmente você pode detectar em tempo de compilation com macros #ifdef . Ou em C, você poderia escrever um if() […]

Maneira mais rápida de descompactar 32 bits em um vetor SIMD de 32 bytes

Tendo 32 bits armazenados em um uint32_t na memory, qual é a maneira mais rápida de descompactar cada bit em um elemento de byte separado de um registro AVX? Os bits podem estar em qualquer posição dentro de seu respectivo byte. Edit: para esclarecer, quero dizer bit 0 vai para byte 0, bit 1 para […]