Articles of assembly de

Qual é a melhor maneira de mover um object na canvas?

Eu queria saber qual é a melhor maneira de mover um object na canvas – para expample: se algum tipo de forma fosse apresentado na canvas (no modo gráfico), eu gostaria de movê-lo para a esquerda e direita usando as teclas de setas do teclado. Eu sei ler o buffer do teclado. O importante é […]

Protegendo executável de engenharia reversa?

Eu estive contemplando como proteger meu código C / C ++ de desassembly e engenharia reversa. Normalmente, eu nunca aceitaria esse comportamento no meu código; no entanto, o protocolo atual em que tenho trabalhado não deve nunca ser inspecionado ou compreendido, para a segurança de várias pessoas. Agora, este é um assunto novo para mim, […]

É seguro ler além do final de um buffer na mesma página em x86 e x64?

Muitos methods encontrados em algoritmos de alto desempenho poderiam ser (e são) simplificados se tivessem permissão para ler uma pequena quantidade após o fim dos buffers de input. Aqui, “pequena quantidade” geralmente significa até W – 1 bytes após o final, onde W é o tamanho da palavra em bytes do algoritmo (por exemplo, até […]

Qual é o objective do registrador de pointers de quadro EBP?

Eu sou um iniciante em linguagem assembly e notei que o código x86 emitido pelos compiladores geralmente mantém o ponteiro do quadro em volta mesmo no modo release / optimized quando ele poderia usar o registrador EBP para outra coisa. Eu entendo porque o ponteiro do quadro pode tornar o código mais fácil de depurar, […]

A substituição de um contador de loops de 32 bits por um de 64 bits apresenta desvios loucos no desempenho

Eu estava procurando o caminho mais rápido para popcount grandes matrizes de dados. Eu encontrei um efeito muito estranho : Alterar a variável de loop de unsigned para uint64_t fez o desempenho cair 50% no meu PC. O benchmark #include #include #include int main(int argc, char* argv[]) { using namespace std; if (argc != 2) […]

Como eu alcanço o máximo teórico de 4 FLOPs por ciclo?

Como pode o pico máximo teórico de 4 operações de ponto flutuante (precisão dupla) por ciclo ser alcançado em um CPU Intel x86-64 moderno? Pelo que eu entendi, são necessários três ciclos para um SSE add e cinco ciclos para que um mul seja concluído na maioria dos processadores modernos da Intel (veja, por exemplo, […]

Por que os loops são sempre compilados no estilo “do… while” (salto de cauda)?

Ao tentar entender a assembly (com a otimização do compilador ativada), vejo esse comportamento: Um loop muito básico como este outside_loop; while (condition) { statements; } É frequentemente compilado em (pseudocódigo) ; outside_loop jmp loop_condition ; unconditional loop_start: loop_statements loop_condition: condition_check jmp_if_true loop_start ; outside_loop No entanto, se a otimização não estiver ativada, ela será […]

O que é a IACA e como eu a uso?

Eu encontrei esta ferramenta interessante e poderosa chamada IACA (o Intel Architecture Code Analyzer) , mas eu tenho dificuldade em entendê-lo. O que posso fazer com isso, quais são suas limitações e como posso: Usá-lo para analisar o código em C ou C ++? Usá-lo para analisar o código no montador x86?

É <mais rápido que <=?

Estou lendo um livro onde o autor diz que if( a < 901 ) é mais rápido que if( a <= 900 ) . Não exatamente como neste exemplo simples, mas há pequenas alterações de desempenho no código complexo de loop. Suponho que isso tenha que fazer alguma coisa com código de máquina gerado, caso […]

Instrução INC vs ADD 1: Isso importa?

Da resposta de Ira Baxter, por que as instruções INC e DEC não afetam a Carry Flag (CF)? Principalmente, eu fico longe do INC e DEC agora, porque eles fazem atualizações de código de condição parcial, e isso pode causar estranhas barracas no pipeline, e ADD / SUB não. Então, onde não importa (a maioria […]